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


Основные сведения о форсировании планов

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

SQL Server 2005 представляет подсказку USE PLAN. Подсказка запроса USE PLAN может быть применена, чтобы заставить оптимизатор запросов использовать для формирования запроса определенный план. Подсказка USE PLAN работает посредством приема плана запроса, который необходимо использовать в формате XML в качестве аргумента. Подсказку USE PLAN можно использовать для запросов, планы которых замедляют их выполнение, но для которых существует лучший план. Обычный сценарий может использовать запросы, которые хорошо выполнялись в более ранней версии SQL Server, но в обновленной версии выполняются плохо, независимо от того, является ли это обновление пакетом обновления или полной версией обновления. В большинстве случаев обновление предполагает равноценный или более высокий уровень выполнения запросов; однако бывают исключения. Подсказка USE PLAN может быть использована в тех случаях, когда план запроса, выбранный оптимизатором запросов в более ранней версии продукта, является более предпочтительным, чем выбранный после обновления.

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

Форсирование планов может быть использовано в большинстве типов запросов SELECT. К ним относятся запросы к таблицам, кластеризованным и некластеризованным индексам, индексированным представлениям, а также к секционированным таблицам и индексам. Подсказка запроса USE PLAN не может быть указана для инструкций INSERT, UPDATE и DELETE.

Планы запросов, созданные с подсказкой в запросе USE PLAN, кэшируются также, как и другие планы запросов.

Ограничения форсирования планов

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

При использовании в запросе подсказки USE PLAN для изменения компиляции запроса в развернутом приложении ее следует применять внутри руководства плана, а не посредством прямого внедрения в приложение. Этим можно решить следующие проблемы:

  • Можно изменить или удалить подсказку без повторной компиляции или изменения приложения. В некоторых случаях подсказка USE PLAN, применяемая к выпуску SQL Server, может быть не применима к будущему пакету обновления или варианту выпуска. Следовательно, может понадобиться изменить или удалить подсказку USE PLAN после развертывания приложения.
  • Можно избежать использования большой подсказки непосредственно в запросе. Это облегчает чтение запроса.
    ms186343.note(ru-ru,SQL.90).gifВажно!
    При создании руководства плана, использующего USE PLAN, во время тестирования следует проверить, является ли запрос, план которого необходимо форсировать, запросом, который обычно запрашивается курсором. Планы запросов для курсорных запросов отличаются от планов некурсорных запросов. Таким образом, чтобы создать руководство плана с указанием подсказки USE PLAN, которое может быть применено к запросу, предъявляемому курсором, руководство плана должно указывать план исполнения курсора. Дополнительные сведения см. в разделе Использование подсказки USE PLAN в запросах с курсорами.

Форсирование планов не поддерживается следующими типами запросов в SQL Server 2005:

  • Запросы с динамическими, управляемыми наборами ключей и однонаправленными курсорами. Статические и опережающие курсоры поддерживаются. Дополнительные сведения см. в разделе Использование подсказки USE PLAN в запросах с курсорами.
  • Распределенные запросы.
  • Полнотекстовые запросы.
  • Инструкции INSERT, DELETE и UPDATE.

См. также

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

Указание планов запросов с помощью форсирования планов

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

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

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

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

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

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

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

Изменения
  • Исправлено неточное утверждение о том, что планы запросов, созданные с помощью подсказки USE PLAN, не будут кэшированы, если длина результирующего строкового литерала превышает 8 КБ.