sys.sp_control_plan_guide (Transact-SQL)

Aplica-se:SQL Server

O sp_control_plan_guide procedimento armazenado do sistema é usado para descartar, habilitar ou desabilitar um guia de plano.

Convenções de sintaxe de Transact-SQL

Sintaxe

sys.sp_control_plan_guide
    [ @operation = ] { N'DROP [ ALL ]' | N'DISABLE [ ALL ]' | N'ENABLE [ ALL ]' }
    [ , [ @name = ] N'name' ]
[ ; ]

Argumentos

@operation [ = ] { N'DROP [ ALL ]' | N'DESABILITAR [ TODOS ]' | N'ENABLE [ ALL ]' }

A operação a ser executada no guia de plano especificado em @name. @operation é nvarchar(60), sem padrão.

  • DROP

    Descarta o guia de plano especificado por @name. Depois que um guia de plano é descartado, as execuções futuras de uma consulta anteriormente correspondida pelo guia de plano não são influenciadas pelo guia de plano.

  • DROP ALL

    Descarta todos os guias de plano no banco de dados atual. @name não pode ser especificado quando DROP ALL é especificado.

  • DISABLE

    Desabilita o guia de plano especificado pelo @name. Depois que um guia de plano é desabilitado, as execuções futuras de uma consulta anteriormente correspondida pelo guia de plano não são influenciadas pelo guia de plano.

  • DISABLE ALL

    Desabilita todos os guias de plano no banco de dados atual. @name não pode ser especificado quando DISABLE ALL é especificado.

  • ENABLE

    Habilita o guia de plano especificado por @name. Um guia de plano pode ser correspondido a uma consulta qualificada depois de habilitado. Por padrão, os guias de plano são habilitados no momento em que são criados.

  • ENABLE ALL

    Habilita todos os guias de plano no banco de dados atual. @name não pode ser especificado quando ENABLE ALL é especificado.

[ @name = ] N'nome'

Especifica o guia de plano que está descartado, habilitado ou desabilitado. @name é sysname, com um padrão de NULL. @name é resolvido para o banco de dados atual. Se não for especificado, o padrão @name .NULL

Comentários

A tentativa de cancelar ou modificar uma função, procedimento armazenado ou gatilho DML referenciado por um guia de plano, habilitado ou desabilitado, provoca 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.

Os guias de planos não estão disponíveis em todas as edições do SQL Server. No entanto, você pode executar sp_control_plan_guide com a DROP opção ou DROP ALL em qualquer edição do SQL Server. Para uma lista de recursos suportados pelas edições do SQL Server, veja Edições e recursos suportados do SQL Server 2025.

Permissões

A execução sp_control_plan_guide em um guia de plano do tipo OBJECT (criado especificando @type = '<object>') requer ALTER permissão no objeto referenciado pelo guia de plano. Todos os outros guias de plano exigem ALTER DATABASE permissão.

Exemplos

R. Habilitar, desabilitar e descartar 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.
EXECUTE 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.
EXECUTE sp_control_plan_guide N'DISABLE',
    N'Guide3';
GO

--Enable the plan guide.
EXECUTE sp_control_plan_guide N'ENABLE',
    N'Guide3';
GO

--Drop the plan guide.
EXECUTE sp_control_plan_guide N'DROP',
    N'Guide3';
GO

B. Desabilitar todos os guias de plano no banco de dados atual

O exemplo seguinte desabilita todos os guias de plano no banco de dados AdventureWorks2025.

USE AdventureWorks2022;
GO

EXECUTE sp_control_plan_guide N'DISABLE ALL';