Partilhar via


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

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

Argumentos

@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

@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.

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. Para obter uma lista de recursos com suporte nas edições do SQL Server, confira Edições e recursos com suporte no SQL Server 2022. No entanto, você pode executar sp_control_plan_guide com a DROP opção ou DROP ALL em qualquer edição do SQL Server.

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

USE AdventureWorks2022;
GO
EXEC sp_control_plan_guide N'DISABLE ALL';