Автор |
Сообщение |
30/08/2018 10:17:42
|
Владимир Игнатов
Зарегистрирован: 02/08/2017 09:19:30
Сообщений: 581
Оффлайн
|
Когда идет загрузка справочников "от начала времён" (updateDate=0), постепенно увеличивая смещение от начала (offset), сервер выполняет нечто вроде
select ... from ... where updateDate>=:updateDate limit offset, blocksize
В нехорошем случае, когда нельзя воспользоваться индексом, это будет приводить к формированию временной результирующей таблицы на (offset+blocksize) записей (от начала времен, т.к. updateDate=0), из которой потом будет отдано последние blocksize записей, и с увеличением offset, понятное дело, временная результирующая таблица будет расти, а ее формирование будет занимать все больше времени, что будет приводить к таймаутам.
Решением данной проблемы будет запрос за один "проход" не всего справочника, а, например, не более чем offset=50 - 100 тысяч записей. При достижении этого значения - накопленные данные записать себе в базу и пойти на следующий проход, взяв в качестве updateDate последнюю updateDate из уже полученных.
|
|
|
|
|
|