База данных испытывает снижение производительности. Необходимо выявить запросы, потребляющие больше всего ресурсов, отслеживать изменения планов и находить регрессии производительности.
→Включите и используйте Query Store.
Почему: Query Store — это встроенный "бортовой самописец" производительности запросов. Он автоматически собирает историю запросов, планы и статистику ожиданий, что делает его основным инструментом для диагностики проблем производительности с течением времени.
Источник↗
Запрос иногда выполняется хорошо, а иногда плохо из-за проблем с перехватом параметров, когда план выполнения оптимизирован для нерепрезентативного значения параметра.
→Используйте Query Store для выявления различных планов и принудительного использования постоянно хорошего плана выполнения.
Почему: Принудительное применение плана в Query Store обеспечивает быстрый и эффективный способ стабилизации производительности для проблемных запросов без изменения кода. Оно переопределяет выбор оптимизатора известным хорошим планом.
Для повышения производительности запросов без изменения кода путем использования таких функций, как пакетный режим для rowstore, обратная связь по выделению памяти и отложенная компиляция табличных переменных.
→Установите уровень совместимости базы данных на 150 (для функций SQL 2019) или выше.
Почему: Набор функций Intelligent Query Processing (IQP) активируется уровнем совместимости базы данных. Уровень 150+ активирует широкий спектр улучшений производительности "без изменения кода" в обработчике запросов.
Команда операций должна получать уведомления, когда ключевые метрики производительности, такие как процент использования ЦП или взаимоблокировки, превышают определенный порог.
→Используйте Azure Monitor для создания оповещений метрик (для ЦП) и оповещений журналов (для взаимоблокировок), которые запускают Action Group.
Почему: Azure Monitor — это централизованная платформа для мониторинга и оповещения о ресурсах Azure. Action Groups предоставляют гибкие каналы уведомлений (электронная почта, SMS, webhook и т. д.).
Повышение производительности записи путем выявления и удаления индексов, которые не используются никакими запросами на чтение.
→Запросите DMV `sys.dm_db_index_usage_stats`.
Почему: Эта DMV отслеживает использование индексов (поиски, сканирования, просмотры) по сравнению с обновлениями. Индексы с большим количеством обновлений, но нулевым или очень низким использованием являются основными кандидатами на удаление, что снижает накладные расходы на обслуживание.
Необходимо собрать подробную информацию о периодических проблемах блокировки, включая операторы и сеансы, участвующие в цепочке блокировки.
→Настройте сеанс Extended Events, который фиксирует событие `blocked_process_report`.
Почему: Это событие предоставляет подробный XML-отчет о цепочках блокировки при превышении `blocked process threshold`, предлагая глубокую диагностическую информацию, недоступную в DMV.
База данных нуждается в автоматической адаптации своей индексной стратегии к изменяющимся шаблонам рабочей нагрузки без ручного вмешательства.
→Включите опцию CREATE_INDEX в автоматической настройке Azure SQL Database.
Почему: Эта функция позволяет Azure анализировать рабочую нагрузку, выявлять отсутствующие индексы с высоким влиянием, создавать их и проверять их выгоду для производительности, автоматизируя ключевую задачу DBA.
Перенесите рабочие нагрузки отчетов, интенсивно использующие чтение, с основной базы данных OLTP на уровне Business Critical или Premium.
→Измените строки подключения приложения только для чтения, чтобы включить `ApplicationIntent=ReadOnly`.
Почему: Эти уровни включают бесплатную, встроенную реплику для чтения. Свойство `ApplicationIntent` в строке подключения автоматически направляет соединения только для чтения на эту реплику, изолируя рабочие нагрузки чтения.
Большая таблица фактов в хранилище данных часто используется для запросов агрегации (SUM, COUNT, AVG), которые выполняются медленно.
→Создайте кластеризованный columnstore index на таблице фактов.
Почему: Columnstore indexes хранят данные в столбцовом формате, обеспечивая очень высокую степень сжатия данных и позволяя выполнять пакетный режим, что значительно ускоряет агрегацию и аналитические запросы с интенсивным сканированием.
База данных испытывает значительные конфликты блокировки между запросами на чтение (отчеты) и запросами на запись (транзакции).
→Включите Read Committed Snapshot Isolation (RCSI) в базе данных.
Почему: RCSI использует управление версиями строк, позволяя читателям видеть последнюю зафиксированную версию данных без установки общих блокировок, тем самым устраняя блокировки от писателей. Писатели не блокируют читателей.
Приложение, использующее бессерверную базу данных, испытывает начальные медленные времена подключения после периода бездействия.
→Уменьшите задержку авто-паузы или настройте минимальное значение vCore больше нуля.
Почему: Задержка вызвана возобновлением работы базы данных из приостановленного состояния ("холодный старт"). Установка минимального значения vCore предотвращает полную приостановку работы базы данных, устраняя задержку возобновления за счет некоторой постоянной оплаты вычислений.