Поделиться через


Проектирование и реализация руководств планов

Изменения: 15 сентября 2007 г.

Руководства планов используются для оптимизации производительности запросов, когда изменить непосредственно текст запроса невозможно или нежелательно. Можно создавать руководства планов, которые будут соответствовать запросам, выполняющимся в таких контекстах.

  • Руководства планов OBJECT соответствуют запросам, выполняемым в контексте хранимых процедур Transact-SQL, скалярных функций, многооператорных, возвращающих табличное значение функций и триггеров DML.
  • Руководства планов SQL соответствуют запросам, выполняемым в контексте отдельных инструкций и пакетов Transact-SQL, не входящих ни в один из объектов базы данных. Руководства планов SQL также можно использовать для соответствия запросам с параметрами.
  • Руководство плана TEMPLATE соответствует отдельному запросу, который параметризуется в указанную форму. Эти руководства планов используются для замещения текущего параметра PARAMETERIZATION инструкции SET базы данных для класса запросов.
ms189854.note(ru-ru,SQL.90).gifПримечание.
Руководства планов могут использоваться только в выпусках SQL Server 2005 Standard, Developer, Evaluation и Enterprise, однако они видны в любой версии. Можно также присоединить базу данных, содержащую руководства планов, к любой версии. Руководства планов остаются нетронутыми при восстановлении или присоединении базы данных к обновленной версии SQL Server 2005. Следует тщательно взвешивать необходимость использовать руководства планов в каждой базе данных после выполнения обновления сервера.

Для руководств планов, основанных на SQL или TEMPLATE, указывающих @type = N'SQL' или @type = N'TEMPLATE' в инструкции sp_create_plan_guide, SQL Server сопоставляет значения для аргументов @module_or_batch и @params с запросом путем посимвольного сравнения двух значений. Это означает, что необходимо предоставить текст точно в том же виде, в каком SQL Server получит его в действительном пакете. Чтобы захватить действительный текст пакета, можно использовать приложение SQL Server Profiler. В целом следует тестировать руководства планов с использованием приложения SQL Server Profiler, чтобы убедиться, что запрос сопоставляется с руководством плана. Тестирование руководств планов, основанных на SQL или TEMPLATE, посредством выполнения пакетов из среды SQL Server Management Studio может привести к неожиданным результатам. Дополнительные сведения см. в разделе Использование приложения SQL Server Profiler для создания и проверки руководств планов.

ms189854.note(ru-ru,SQL.90).gifПримечание.
Пакет, содержащий инструкцию, по которой необходимо создать руководство плана, не может включать в себя инструкцию USE database.

Если @type = 'SQL' и @module\_or\_batch имеет значение NULL, то значение @module\_or\_batch устанавливается равным @stmt. Это значит, что значение statement_text должно быть объявлено в точно таком же формате, символ за символом, как предложено в SQL Server. Для упрощения соответствия формата внутренние преобразования не выполняются.

Руководства планов действительны в области видимости базы данных, в которой они создаются. Следовательно, только руководства планов, существующие в базе данных, которая является текущей на момент выполнения запроса, могут быть сопоставлены с запросом. Например, если AdventureWorks является текущей базой данных и выполняется нижеследующий запрос:

SELECT * FROM Person.Contact

Только руководства планов в базе данных AdventureWorks подлежат сопоставлению с этим запросом.

Но если AdventureWorks является текущей базой данных и выполняются нижеследующие инструкции:

USE DB1;
GO
SELECT * FROM Person.Contact;

Только руководства планов в DB1 подлежат сопоставлению с запросом, поскольку запрос выполняется в контексте DB1.

Любые комбинации действительных подсказок в запросе могут быть использованы в руководстве плана. Когда руководство плана совпадает с запросом, предложение OPTION, указанное в руководстве плана, добавляется к запросу прежде, чем запрос подвергается компиляции и оптимизации. Если в запросе, совпавшем с руководством плана, уже присутствует предложение OPTION, подсказки в запросе, указанные в руководстве плана, заменяют рекомендации в запросе. Чтобы руководство плана совпало с запросом, уже содержащим предложение OPTION, необходимо включить предложение OPTION запроса при указании текста запроса для сопоставления в инструкции sp_create_plan_guide. Если необходимо, чтобы рекомендации, указанные в руководстве плана, были добавлены к рекомендациям, которые уже существуют в запросе, вместо того, чтобы заменить их, следует указать и оригинальные, и дополнительные рекомендации в предложении OPTION руководства плана.

Общее число руководств планов, которые можно создать, ограничивается только доступными системными ресурсами. Тем не менее руководства планов должны использоваться расчетливо, в отношении только отдельных запросов, подлежащих улучшению или стабилизации производительности. Руководства планов не следует использовать для основной массы запросов развернутого приложения. В частности, руководства планов, применяющие в запросе подсказку USE PLAN, применяют фиксированный план к целевому запросу. Следовательно, оптимизатор запроса более не способен адаптировать план для запроса к изменениям в статистике и индексах.

Рассматривая применение руководств планов, использующих запрос USE PLAN, убедитесь в том, что выгода применения фиксированного плана сопоставима с невозможностью адаптации плана автоматически к изменениям в распространении данных и доступных индексах.

Рекомендуется переоценить и протестировать определения руководств планов при обновлении приложения для работы с новой версией SQL Server. Требования к настройке производительности и поведение сопоставления руководств планов могут меняться.

Влияние руководства плана на кэш планов

Создание руководства плана в модуле стирает план запроса для этого модуля из кэша планов. Создание руководства плана типа OBJECT или SQL в пакете стирает план запроса для пакета, который имеет такое же значение хеш-функции. Создание руководства плана типа TEMPLATE стирает все пакеты с одним оператором из кэша планов через базу данных.

Создание руководства плана

Отключение, повторное включение и удаление руководств планов

Получение сведений о руководствах планов в текущей базе данных

См. также

Основные понятия

Оптимизация запросов в используемых приложениях с помощью руководств планов

Другие ресурсы

Производительность запроса

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

15 сентября 2007 г.

Обновления
  • Включены пояснения в требования согласования руководства плана для параметра statement_text, если @type = 'SQL' и @module_or_batch имеет значение NULL.
  • Добавлены сведения о влиянии создания руководств планов на кэш планов.