sp_control_plan_guide (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';
Б. Отключение всех структур планов в текущей базе данных
В следующем примере отключаются все структуры планов в базе данных AdventureWorks.
USE AdventureWorks;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';