Хранимая процедура sp_control_plan_guide (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

sp_control_plan_guide [ @operation = ] N'<control_option>'
  [ , [ @name = ] N'plan_guide_name' ]

<control_option>::=
{ 
    DROP 
  | DROP ALL
  | DISABLE
  | DISABLE ALL
  | ENABLE 
  | ENABLE ALL
}

Аргументы

  • N'plan_guide_name'
    Задает структуру плана, предназначенную к удалению, включению или отключению. Аргумент plan_guide_name разрешается в текущей базе данных. Если параметр не указан, аргумент plan_guide_name имеет значение по умолчанию NULL.

  • DROP
    Удаляет структуры плана, заданные аргументом plan_guide_name. После удаления структуры плана будущее выполнение запроса, ранее соответствовавшего этой структуре плана, не затрагивается.

  • DROP ALL
    Удаляет все структуры планов из текущей базы данных. Если задан параметр DROP ALL, нельзя указывать аргумент **N'**plan_guide_name .

  • DISABLE
    Отключает структуру плана, заданную аргументом plan_guide_name. После отключения структуры плана будущее выполнение запроса, ранее соответствовавшего этой структуре плана, не затрагивается.

  • DISABLE ALL
    Отключает все структуры планов в текущей базе данных. Если задан параметр DISABLE ALL, нельзя указывать аргумент **N'**plan_guide_name .

  • ENABLE
    Включает структуру плана, заданную аргументом plan_guide_name. После включения структуры плана с ней может быть сопоставлен совпадающий запрос. По умолчанию структура плана включается во время создания.

  • ENABLE ALL
    Включает все структуры планов в текущей базе данных. Если задан параметр ENABLE ALL, то указывать аргумент N'plan_guide_name' нельзя.

Замечания

Попытка удаления или изменения функции, хранимой процедуры или триггера DML, на которые имеется ссылка в структуре плана (как включенных, так и отключенных), приводит к ошибке.

Отключение уже отключенной структуры плана или включение включенной не имеет силы и не вызывает ошибки.

Хранимую процедуру sp_control_plan_guide с параметрами DROP или DROP ALL можно выполнять во всех выпусках SQL Server, однако все остальные параметры доступны только в выпусках Standard и Enterprise.

Разрешения

Для выполнения процедуры sp_control_plan_guide в отношении структуры плана типа OBJECT (созданной с помощью @type ='OBJECT') требуется разрешение ALTER для объекта, на который ссылается эта структура плана. Все остальные структуры планов требуют разрешения ALTER DATABASE.

Примеры

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

В следующем примере структура плана создается, отключается, включается и удаляется.

--Create a procedure on which to define the plan guide.
IF OBJECT_ID(N'Sales.GetSalesOrderByCountry', N'P') IS NOT NULL
    DROP PROCEDURE Sales.GetSalesOrderByCountry;
GO
CREATE PROCEDURE Sales.GetSalesOrderByCountry 
    (@Country nvarchar(60))
AS
BEGIN
    SELECT *
    FROM Sales.SalesOrderHeader AS h 
    INNER JOIN Sales.Customer AS c ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country;
END
GO
--Create the plan guide.
EXEC sp_create_plan_guide N'Guide3',
    N'SELECT *
    FROM Sales.SalesOrderHeader AS h 
    INNER JOIN Sales.Customer AS c ON h.CustomerID = c.CustomerID
    INNER JOIN Sales.SalesTerritory AS t ON c.TerritoryID = t.TerritoryID
    WHERE t.CountryRegionCode = @Country',
    N'OBJECT',
    N'Sales.GetSalesOrderByCountry',
    NULL,
    N'OPTION (OPTIMIZE FOR (@Country = N''US''))';
GO
--Disable the plan guide.
EXEC sp_control_plan_guide N'DISABLE', N'Guide3';
GO
--Enable the plan guide.
EXEC sp_control_plan_guide N'ENABLE', N'Guide3';
GO
--Drop the plan guide.
EXEC sp_control_plan_guide N'DROP', N'Guide3';

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

В следующем примере отключаются все структуры планов в базе данных AdventureWorks2008R2.

USE AdventureWorks2008R2;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';