Задали вопрос на собеседовании по sql
Система успешно работала полгода, затем неожиданно производительность серьезно деградировала. Возможные проблемы, пути решения?
Как можно было ответить?
Ответ
Если объем данных не рос, и приложение не менялось:
Посмотреть на настройки памяти - вдруг что-то выдавливает SQL Server (A significant part of SQL Server process memory has been paged out в логах). Или просто памяти не хватает.
Посмотреть фрагментацию индексов и актуальность статистики. Хороший DBA должен был прикрутить автодефраг и обновление как часть обслуживания, если не прикрутил - взять с https://ola.hallengren.com/, или хотя бы настроить maintenance plan.
Посмотреть на стандартные ошибки настроек Recovery Mode (Full без бэкапа логов, Full с бэкапом логов и слишком актвным шринком).
Если объем данных рос, или менялось приложение:
Посмотреть медленные/дорогие/regressed запросы через Qurery Store (если доступен и включен). Или хотя бы sys.dm_exec_query_stats.
Если есть явные проблемные запросы - чинить их. Если нет - обновить статистику / дефрагментировать индексы, и начинать чинить/переписывать запросы, начиная с тех, которые вам больше всего не нравятся.
В качестве более подробного чеклиста: MSDN, Checklist for Analyzing Slow-Running Queries
Чего точно делать нельзя:
Нельзя делать хоть что-то, если до конца не понимаешь возможные последствия. Нельзя пересчитывать статистику не зная, что это такое. И нельзя добавлять индексы, не понимая как они работают внутри. В том числе - нельзя использовать ответы на SO в качестве замены собственного понимания истоков проблемы :)
Нельзя создавать индексы наугад, не измеряя разницу на конкретных запросах.
Нельзя чинить проблемы краткосрочными костылями. Т.е. если пересчет статистики помог - его надо включить в maintenance plan, а не просто оставить как есть до следующего раза.
Комментариев нет:
Отправить комментарий