sp_control_plan_guide (Transact-SQL)

Descarta, habilita ou desabilita um guia de plano.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

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';