Рекомендации по использованию подсказок Query Store
Область применения: SQL Server 2022 (16.x)
База данных SQL Azure
Управляемый экземпляр SQL Azure
база данных SQL в Microsoft Fabric
В этой статье описаны рекомендации по использованию Query Store hints. Указания хранилища запросов позволяют формировать фигуры плана запроса без изменения кода приложения.
- Дополнительные сведения о настройке и администрировании с помощью хранилища запросов см. в разделе Мониторинг производительности с помощью хранилища запросов.
- Сведения об обнаружении полезных сведений и настройке производительности с помощью хранилища запросов см. в статье Настройка производительности с помощью хранилища запросов.
Варианты использования подсказок хранилища запросов
Рассмотрим следующие оптимальные варианты использования подсказок хранилища запросов. Дополнительные сведения см. в разделе Когда следует использовать указания хранилища запросов.
Внимание
Так как оптимизатор запросов SQL Server обычно выбирает оптимальный план выполнения для запроса, мы рекомендуем использовать только указания в качестве последнего средства для опытных разработчиков и администраторов баз данных. Дополнительные сведения см. в разделе Указания запросов.
Когда невозможно изменить код
Использование указаний хранилища запросов позволяет влиять на планы выполнения запросов без изменения кода приложения или объектов базы данных. Никакие другие функции не позволяют быстро и легко применять указания запросов.
Например, вы можете использовать подсказки Query Store, чтобы извлечь выгоду из ETL без повторного развертывания кода. Узнайте, как улучшить массовую загрузку с помощью указаний хранилища запросов, посмотрев это 14-минутное видео:
Указания хранилища запросов — это упрощенные методы настройки запросов, но если запрос становится проблематичным, его проблемы следует решать путем более значительных изменений кода. Если вы регулярно обнаруживаете необходимость применения к запросу указаний хранилища запросов, рассмотрите возможность более серьезного изменения запроса. Оптимизатор запросов SQL Server обычно выбирает лучший план выполнения запроса, поэтому использовать указания рекомендуется только опытным разработчикам и администраторам баз данных в самом крайнем случае.
Сведения о том, какие указания запросов можно применять, см. в разделе Поддерживаемые указания запросов.
При высокой транзакционной нагрузке или с критически важным кодом
Если изменения кода нецелесообразны из-за высоких требований к времени безотказной работы или транзакционной нагрузки, подсказки хранилища запросов могут быстро применять подсказки к существующим запросам. Добавление и удаление подсказок хранилища запросов выполняется довольно просто.
Подсказки хранилища запросов можно добавлять и удалять в пакетах запросов, чтобы настроить производительность для периодов времени, приуроченных к всплескам исключительно высокой рабочей нагрузки.
В качестве замены руководств по плану
До появления указаний хранилища запросов разработчику приходилось полагаться на руководства по планам для выполнения аналогичных задач, что нередко было сложно использовать. Указания хранилища запросов интегрированы с функциями хранилища запросов SQL Server Management Studio (SSMS) для визуального изучения запросов.
При помощи руководств по планам необходим поиск по всем планам, используя фрагменты запросов. Функция подсказок хранилища запросов не требует точного соответствия запросов для влияния на итоговый план запроса. Указания хранилища запросов можно применять к query_id
в наборе данных хранилища запросов.
Подсказки Query Store переопределяют жестко закодированные подсказки на уровне инструкций и существующие план-гиды.
Рассмотрите новый уровень совместимости
Указания хранилища запросов могут быть особенно полезны, если для вас недоступен более новый уровень совместимости базы данных, например, из-за спецификации поставщика или больших задержек тестирования. Если для базы данных доступен более высокий уровень совместимости, рассмотрите возможность обновления уровня совместимости базы данных отдельного запроса, чтобы воспользоваться преимуществами последних оптимизаций производительности и функций SQL Server.
Например, если у вас есть экземпляр SQL Server 2022 (16.x) с базой данных на уровне совместимости 140, можно по-прежнему использовать хранилище запросов указания для выполнения отдельных запросов на уровне совместимости 160. Можно использовать следующее указание:
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
Для полного учебника см. Примеры подсказок хранилища запросов.
Рассмотрите более старый уровень совместимости после обновления
Другой случай, когда подсказки Query Store могут помочь, - это когда запросы не могут быть изменены напрямую после миграции или обновления экземпляра SQL Server. Используйте подсказки хранилища запросов, чтобы применить предыдущий уровень совместимости для запроса, пока его нельзя переписать или иным образом не обеспечить его хорошее выполнение на последнем уровне совместимости. Определите аномальные запросы, которые регрессируют при более высоком уровне совместимости с помощью отчета о регрессии запросов хранилища запросов, инструмента 'Советник по настройке запросов' во время миграции или телеметрии других приложений на уровне запросов. Дополнительные сведения о различиях между уровнями совместимости см. в разделе "Различия между уровнями совместимости".
После тестирования производительности нового уровня совместимости и развертывания подсказок Query Store таким образом, можно обновить уровень совместимости всей базы данных, сохраняя ключевые проблемные запросы на предыдущем уровне совместимости без каких-либо изменений в коде.
Рекомендации по подсказкам хранилища запросов Query Store
При развертывании подсказок Query Store учитывайте следующие сценарии.
Изменения распределения данных
Структуры планов, принудительные планы посредством хранилища запросов и указания хранилища запросов переопределяют принятие решений оптимизатора. Подсказка из хранилища запросов может быть полезной сейчас, но не в будущем. Например, если подсказка Query Store помогает запросу при предыдущем распределении данных, она может оказаться ненужной, если крупномасштабные операции DML изменяют данные. Новое распределение данных может привести к тому, что оптимизатор будет принимать лучшее решение, чем указание. Этот сценарий является наиболее распространенным следствием принуждения плана к определенному поведению.
Регулярно переоценивайте стратегию использования подсказок в Хранилище запросов
Переосмыслите вашу текущую стратегию подсказок для хранилища запросов в следующих случаях.
- После известных изменений распределения больших данных.
- При изменении целевого уровня обслуживания (SLO) Базы данных SQL Azure, Управляемого экземпляра или виртуальной машины.
- Когда исправление плана становится долгосрочным. Указания хранилища запросов лучше всего использовать для краткосрочных исправлений.
- Непредвиденные регрессии производительности.
Широкий потенциал воздействия
Указания хранилища запросов влияют на все выполнения запроса, независимо от набора параметров, исходного приложения, пользователя или результатов. В случае регрессии производительности по случайности, подсказки в хранилище запросов, созданные с помощью sys.sp_query_store_set_hints, можно легко удалить с помощью sys.sp_query_store_clear_hints.
Тщательно проверяйте изменения нагрузочных тестов для критически важных или конфиденциальных систем перед применением указаний хранилища запросов в рабочей среде.
Принудительная параметризация и указание RECOMPILE не поддерживаются
Применение подсказки RECOMPILE вместе с подсказками Query Store не поддерживается, если параметр базы данных PARAMETERIZATION имеет значение FORCED. См. рекомендации по использованию принудительной параметризации.
Указание RECOMPILE несовместимо с настройкой принудительной параметризации на уровне базы данных. Если в базе данных настроена принудительная параметризация, а указание RECOMPILE является частью строки указаний, заданной в хранилище запросов для запроса, ядро СУБД будет игнорировать указание RECOMPILE и применять другие указания, если они используются. Кроме того, начиная с июля 2022 года в База данных SQL Azure, должно быть выдано предупреждение (код ошибки 12461) о том, что подсказка RECOMPILE была проигнорирована.
Сведения о том, какие указания запросов можно применять, см. в разделе Поддерживаемые указания запросов.
См. также
- Указания хранилища запросов
- sys.query_store_query_hints (Transact-SQL)
- sys.sp_query_store_set_hints (Transact-SQL)
- sys.sp_query_store_clear_hints (Transact-SQL)
- Сохранение плана выполнения в формате XML
- Отображение и сохранение планов выполнения
- Указания (Transact-SQL) — запросы