Определите, подходит ли помощник по настройке запросов (QTA)

Завершено

Вы знаете о возможной регрессии плана запросов и потере производительности после обновления версий базы данных. Чтобы обеспечить производительность после обновления базы данных, необходимо найти лучший метод для выявления и устранения регрессивных запросов. В этом уроке описывается, как использовать помощник по настройке хранилище запросов и запросов (QTA) для обеспечения снижения производительности после обновления.

Начало работы с помощником по настройке хранилище запросов и запросов

QTA зависит от хранилище запросов данных для поиска запросов, которые регрессии после обновления. Хранилище запросов позволяет собирать метрики в старой версии базы данных перед обновлением.

В SQL Server 2016 появилась хранилище запросов, а QTA появилась в SQL Server 2017. Любая версия базы данных, которая выполняется в экземпляре SQL Server 2022, может использовать обе эти функции. Эти средства интегрируются в SQL Server Management Studio (SSMS) и работают на уровне базы данных.

Уровень совместимости базы данных определяет свою версию, которая, в свою очередь, определяет версию оценки карта inality, которую она использует. Средство оценки карта inality прогнозирует, сколько строк запроса, скорее всего, возвращается, поэтому оптимизатор запросов может выбрать план с наименьшей стоимостью. В SQL Server 2014 появился обновленный алгоритм оценки карта inality, который обеспечивает преимущества большинства запросов, но редко может оказать негативное влияние на производительность.

Для измерения влияния на производительность хранилище запросов сообщает регрессированные запросы и запросы, которые используют большинство системных ресурсов. QTA сравнивает данные о производительности запросов хранилище запросов до и после обновления базы данных и экспериментирует с запросами для повышения производительности.

Примечание.

QTA недоступен для База данных SQL Azure или Управляемый экземпляр SQL баз данных. Для этих баз данных рекомендуется использовать расширение миграции SQL Azure для Azure Data Studio.

Исправление QTA и автоматическое планирование

Когда SQL Server запускает запрос Transact-SQL (T-SQL), он анализирует возможные планы, которые могут выполнять запрос. SQL Server кэширует планы для запросов, которые успешно выполняются и повторно используют их при повторном выполнении запросов.

SQL Server выбирает оптимальный план для запроса и использует его до тех пор, пока обстоятельства не принуждает его выбрать новый. Эти обстоятельства могут включать перекомпилирование плана ядра СУБД, добавление или удаление индекса или изменение статистики.

Новый план не всегда будет лучше старого. Чтобы найти запросы с регрессией, выполните следующую команду.

SELECT * FROM sys.dm_db_tuning_recommendations

Затем можно использовать хранимую sp_force_plan процедуру, чтобы принудительно использовать SQL Server для использования рекомендуемого конкретного плана.

EXEC sp_force_plan @query_id = 1187, @plan_id = 1975

Процедура sp_force_plan — это ручной процесс, который потенциально мучен, если многие запросы регрессии в обновленной базе данных. В SQL Server 2017 появилась новая функция автоматического исправления планов для запросов autotune и удаление необходимости вмешательства вручную. Вы можете включить автоматическое исправление плана в базе данных, выполнив следующую инструкцию:

ALTER DATABASE <database-name> SET AUTOMATIC_TUNING (FORCE_LAST_GOOD_PLAN = ON)

При установке на уровне базы данных автоматическое исправление планов указывает SQL Server использовать последний хороший план запроса. SQL Server продолжает отслеживать план для поиска регрессий во время выполнения плана и обеспечения оптимальной производительности.

Автоматическое исправление планов отличается от QTA. Использование последнего хорошего плана может означать откат к более ранней карта inality estimator. И наоборот, QTA выполняет свои эксперименты с использованием версии карта оценщика, сопоставленного с уровнем совместимости целевой базы данных.

Итоги

QTA доступен в SQL Server 2022 и зависит от хранилище запросов для работы. QTA должен иметь хранилище запросов базовые данные базы данных на предыдущем уровне совместимости, поэтому он может наблюдать за запросами и выполнять сравнения после обновления.

Автоматическое исправление плана, введенное в SQL Server 2017, удаляет необходимость вручную определять и принудительно вводить план запроса. Автоматическое исправление плана можно включить на уровне базы данных, но может откатить версию карта оценки карта. QTA использует версию карта inality estimator, сопоставленную с целевым уровнем совместимости.