Страницы

Поиск по вопросам

вторник, 21 мая 2019 г.

Вопрос по оптимизации БД

Задали вопрос на собеседовании по 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, а не просто оставить как есть до следующего раза.

Комментариев нет:

Отправить комментарий