15 причин по которым запрос, который вчера еще работал быстро, сегодня работает медленно
Пересказ статьи Brent Ozar. 15 Reasons Your Query Was Fast Yesterday, But Slow Today
В порядке, определяемом частотой, с которой я их наблюдаю:
1. Различная рабочая нагрузка на сервер (например, запущен процесс создания резервной копии).
2. Вы получаете другой план запроса из-за прослушивания параметра (parameter sniffing).
3. Изменился запрос, например, кто-то обновил код на сервере или добавил столбец в предложение select.
4. Вы получили другой план из-за изменения статистики.
5. Изменилось аппаратное обеспечения (возможно, кто-то изменил настройки аппаратного обеспечения, перешел на соседнюю зашумленную виртуальную машину, или имеет место аппаратная конкуренция в облаке).
6. Кто-то добавил или удалил индекс.
7. Кто-то добавил или удалил флаг трассировки или другой конфигурационный параметр уровня сервера.
8. Изменилось само приложение, и не в состоянии так быстро обрабатывать результаты запроса.
9. Поставили заплатку, и это дало неожиданный побочный эффект.
10. Вы имеете тот же самый план, но другое выделение памяти.
11. Кто-то модифицирует большое число строк в рамках одной транзакции, и вы попадаете на расширение блокировки.
12. Ваш запрос придушил Resource Governor.
13. Он изначально не был быстрым.
И, начиная с SQL Server 2017 (если у вас были поколоночные индексы) и SQL Server 2019 (для всех):
14. Вы получаете различное выделение памяти из-за адаптивного выделения памяти (adaptive memory grants).
15. Вы получаете другой тип соединения из-за изменения порога адаптивного соединения.