sp_control_plan_guide (Transact-SQL)
Descarta, habilita ou desabilita um guia de plano.
Sintaxe
sp_control_plan_guide [ @operation = ] N'<control_option>'
[ , [ @name = ] N'plan_guide_name' ]
<control_option>::=
{
DROP
| DROP ALL
| DISABLE
| DISABLE ALL
| ENABLE
| ENABLE ALL
}
Argumentos
N'plan_guide_name'
Especifica o guia de plano sendo descartado, habilitado ou desabilitado. plan_guide_name é resolvido no banco de dados atual. Se não for especificado, plan_guide_name será padronizado como NULL.DROP
Descarta o guia de plano especificado por plan_guide_name. Após um guia de plano ser descartado, as execuções futuras de uma consulta anteriormente equivalente ao guia de plano não serão influenciadas pelo guia de plano.DROP ALL
Descarta todos os guias de plano no banco de dados atual. **N'**plan_guide_name não pode ser especificado quando DROP ALL está especificado.DISABLE
Desabilita o guia de plano especificado por plan_guide_name. Após um guia de plano ser desabilitado, as execuções futuras de uma consulta anteriormente equivalente ao guia de plano não serão influenciadas pelo guia de plano.DISABLE ALL
Desabilita todos os guias de plano no banco de dados atual. **N'**plan_guide_name não pode ser especificado quando DISABLE ALL está especificado.ENABLE
Habilita o guia de plano especificado por plan_guide_name. Um guia de plano pode ser vinculado a uma consulta elegível após ser habilitado. Por padrão, os guias de plano são habilitados no momento de sua criação.ENABLE ALL
Habilita todos os guias de plano no banco de dados atual. N'plan_guide_name' não pode ser especificado quando ENABLE ALL está especificado.
Comentários
A tentativa de descartar ou modificar uma função, procedimento armazenado ou gatilho DML mencionado por um guia de plano, esteja ele ativado ou não, causa um erro.
A desabilitação de um guia de plano desabilitado ou a habilitação de um guia de plano habilitado não tem nenhum efeito e ocorre sem erro.
É possível executar sp_control_plan_guide com a opção DROP ou DROP ALL em qualquer edição de SQL Server; entretanto, todas as outras opções estão disponíveis apenas nas edições Standard e Enterprise.
Permissões
Para executar sp_control_plan_guide ou um guia de plano do tipo OBJECT (criado com a especificação de @type ='OBJECT' ) requer permissão ALTER no objeto mencionado pelo guia de plano. Todos os outros guias de plano requerem permissão ALTER DATABASE.
Exemplos
A. Habilitando, desabilitando e descartando um guia de plano
O exemplo seguinte cria um guia de plano, desabilita-o, habilita-o e o descarta.
--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. Desabilitando todos os guias de plano no banco de dados atual
O exemplo seguinte desabilita todos os guias de plano no banco de dados AdventureWorks.
USE AdventureWorks;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';