djonik1562
@djonik1562
Системный администратор

Почему может SELECT тормозить через какое-то время, помогает только перестройка пересоздание индекса?

Есть таблица Orders. В которой сейчас около 5 млн записей.
Есть куча полей, индексов. В частности поле RegistrationTime datetime. По нему создан индекс IX_RegistrationTime с сортировкой DESC.
Через какое-то время, примерно 1 неделя, запрос начинает падать по таймауту, за 2 минуты не получает данные. Если пересоздать этот индекс (пересоздается около 3х минут, WITH ONLINE=OFF), то запрос начинает выполняться за секунды (от 2х до 10 секунд). Причем до пересоздания, смотрел отчет SQL по физической статистики индекса, то у этого индекса не было никакой рекомендуемой операции, ни перестроить, ни реорганизовать.
Почему такое может происходить, куда копать?
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ответы на вопрос 4
AndyKorg
@AndyKorg
Кнопконажиматель и припоерасплавлятель
Копать в сторону проверки плана запроса, посмотреть как оптимизатор решил исполнять ваш запрос во время "быстрой" работы и во время "медленной"
Ответ написан
@res2001
Developer, ex-admin
На сколько я помню, нужно регулярно обновлять статистику.
Вот подходящий сценарий обслуживания БД.
Ответ написан
@d-stream
Готовые решения - не подаю, но...
Подозреваю что дело не в самом индексе. Самое простое попробовать - в запросе указать option (recompile)
Ответ написан
djonik1562
@djonik1562 Автор вопроса
Системный администратор
Ну вот сейчас такая же фигня. Запрос выполняется 1 минуту я его отменяю.
Обновление статистики только индексов не помогло.
После обновления статистики по столбцам - запрос нормально стал выполняться.
Вот 99% всего запроса тут. И пока не знаю, можно ли тут как-то оптимизировать запрос.
5bc5a0aed63f9647663573.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы