Хранимая процедура sp_control_plan_guide (Transact-SQL)
Применимо к:SQL Server
Удаляет, включает или отключает структуру плана.
Соглашения о синтаксисе 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
Удаляет все структуры планов из текущей базы данных. Не удается указать N'plan_guide_name при указании DROP ALL.
DISABLE
Отключает руководство по плану, указанное plan_guide_name. После отключения структуры плана будущее выполнение запроса, ранее соответствовавшего этой структуре плана, не затрагивается.
DISABLE ALL
Отключает все структуры планов в текущей базе данных. Не удается указать N'plan_guide_name при указании DISABLE ALL.
ВКЛЮЧЕНИЕ
Включает руководство по плану, указанное plan_guide_name. После включения структуры плана с ней может быть сопоставлен совпадающий запрос. По умолчанию структура плана включается во время создания.
ENABLE ALL
Включает все структуры планов в текущей базе данных. Не удается указать N'plan_guide_name*** при указании ENABLE ALL.
Замечания
Попытка удаления или изменения функции, хранимой процедуры или триггера DML, на которые имеется ссылка в структуре плана (как включенных, так и отключенных), приводит к ошибке.
Отключение уже отключенной структуры плана или включение включенной не имеет силы и не вызывает ошибки.
Руководства по планам недоступны в каждом выпуске Microsoft SQL Server. Список функций, поддерживаемых выпусками SQL Server, см. в выпусках и поддерживаемых функциях SQL Server 2022. Однако вы можете выполнить sp_control_plan_guide с параметром DROP или DROP ALL в любом выпуске SQL Server.
Разрешения
Чтобы выполнить sp_control_plan_guide в руководстве по плану типа OBJECT (созданном с указанием @type ='OBJECT' ) требуется разрешение ALTER для объекта, на который ссылается руководство по плану. Все остальные структуры планов требуют разрешения ALTER DATABASE.
Примеры
А. Включение, отключение и удаление структур планов
В следующем примере структура плана создается, отключается, включается и удаляется.
--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';
B. Отключение всех структур планов в текущей базе данных
В следующем примере отключаются все структуры планов в базе данных AdventureWorks2022
.
USE AdventureWorks2022;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';
См. также
ядро СУБД хранимые процедуры (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)
sp_create_plan_guide (Transact-SQL)
sys.plan_guides (Transact-SQL)
Руководства планов
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по