Compartir vía


sp_control_plan_guide (Transact-SQL)

Se aplica a: SQL Server

El sp_control_plan_guide procedimiento almacenado del sistema se usa para quitar, habilitar o deshabilitar una guía de plan.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

[ @name = ] N'name'

Especifica la guía de plan que se va a quitar, habilitar o deshabilitar. @name es sysname, con un valor predeterminado de NULL. @name se resuelve en la base de datos actual. Si no se especifica, @name el valor predeterminado es NULL.

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

Operación que se va a realizar en la guía de plan especificada en @name. @operation es nvarchar(60), sin ningún valor predeterminado.

  • DROP

    Quita la guía de plan especificada por @name. Después de quitar una guía de plan, las ejecuciones futuras de una consulta anteriormente coincidente con la guía de plan no están afectadas por la guía de plan.

  • DROP ALL

    Quita todas las guías de plan de la base de datos actual. @name no se puede especificar cuando DROP ALL se especifica .

  • DISABLE

    Deshabilita la guía de plan especificada por @name. Una vez deshabilitada una guía de plan, las futuras ejecuciones de una consulta que anteriormente coincidía con la guía de plan no están afectadas por la guía de plan.

  • DISABLE ALL

    Deshabilita todas las guías de plan de la base de datos actual. @name no se puede especificar cuando DISABLE ALL se especifica .

  • ENABLE

    Habilita la guía de plan especificada por @name. Una guía de plan puede coincidir con una consulta apta después de habilitarla. De forma predeterminada, las guías de plan están habilitadas en el momento en que se crean.

  • ENABLE ALL

    Habilita todas las guías de plan de la base de datos actual. @name no se puede especificar cuando ENABLE ALL se especifica .

Comentarios

Se producirá un error si se intenta quitar o modificar una función, procedimiento almacenado o desencadenador DML al que una guía de plan, habilitada o deshabilitada, haga referencia.

Al deshabilitar una guía de plan deshabilitada o habilitar una guía de plan habilitada, no se produce ningún cambio o error.

Las guías de planes no están disponibles en todas las ediciones de SQL Server. Para obtener una lista de las características admitidas por las ediciones de SQL Server, consulte Ediciones y características admitidas de SQL Server 2022. Sin embargo, puede ejecutar sp_control_plan_guide con la DROP opción o DROP ALL en cualquier edición de SQL Server.

Permisos

sp_control_plan_guide La ejecución en una guía de plan de tipo OBJECT (creada especificando @type = '<object>') requiere ALTER permiso para el objeto al que hace referencia la guía de plan. Todas las demás guías de plan requieren ALTER DATABASE permiso.

Ejemplos

A Habilitar, deshabilitar y quitar una guía de plan

El ejemplo siguiente crea una guía de plan, la deshabilita, la habilita y la quita.

--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. Deshabilitar todas las guías de plan en la base de datos actual

En el ejemplo siguiente se deshabilitan todas las guías de plan de la base de datos AdventureWorks2022.

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