![]() |
#8 |
Участник
|
Цитата:
Сообщение от Arahnid
6. Пишу тот же запрос за 31.12.2010. Данных нет. Запрос вначале выполняется за 0:01:49. Повторно 0:00:11 или 0:0:01.
Цитата:
Сообщение от Arahnid
Статистика по полю, которое я суммирую, обновилось последний раз вчера? Это плохо или это не о чем не говорит?
Сервер анализирует статистику по полям, ограничивающим запрос, что бы сформировать оптимальный план запроса. Ваш случай (запрос данных за 31.12.2010) напоминает тот, что был у меня. Таблица, на которой были проблемы - постоянно растущий лог, 40 млн. записей. Запрос выбирал записи за текущий день. Сервер не обновлял статистику автоматически, т.к. "считал", что изменения таблицы за день незначительны, и в %-ом отношении так и было - лог за 3 года, изменения за день составляли ~0,1%. В результате из-за "кривой" статистики сервер не "видел", что за текущую дату данных очень мало, и делал FULL SCAN таблицы. При этом первое выполнение запроса приводило к загрузке большей части таблицы с диска в память (что занимало несколько минут), а последущие выполнения этого же запроса занимало существенно меньше времени (данные уже были в памяти). Через некоторое время данные из памяти (кеш) исчезали, и запрос снова начинал выполняться долго. При этом же такой же запрос, но за другую дату, выполнялся моментально, т.к. на эту дату была корректная статистика, и вместо FULL SCAN использовался INDEX SEEK. Побороли принудительным сбором статистки, выполянемой рано утром (что бы гарантировать, что в статистике будут отражены данные за текущий день). |
|