다음을 통해 공유


sp_control_plan_guide(Transact-SQL)

적용 대상: SQL Server

sp_control_plan_guide 시스템 저장 프로시저는 계획 지침을 삭제, 사용 또는 사용하지 않도록 설정하는 데 사용됩니다.

Transact-SQL 구문 표기 규칙

구문

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

인수

[ @name = ] N'name'

삭제, 사용 또는 비활성화되는 계획 지침을 지정합니다. @name sysname이며 기본값은 .입니다NULL. @name 현재 데이터베이스로 확인됩니다. 지정 하지 않으면 @name 기본값은 .입니다 NULL.

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

@name 지정된 계획 가이드에서 수행할 작업입니다. @operation nvarchar(60)이며 기본값은 없습니다.

  • DROP

    @name 지정한 계획 지침을 삭제합니다. 계획 가이드를 삭제한 후에는 이전에 계획 가이드와 일치했던 쿼리의 향후 실행은 계획 가이드의 영향을 받지 않습니다.

  • DROP ALL

    현재 데이터베이스의 모든 계획 지침을 삭제합니다. @name 지정할 DROP ALL 수 없습니다.

  • DISABLE

    @name 지정한 계획 지침을 사용하지 않도록 설정합니다. 계획 가이드를 사용하지 않도록 설정한 후에는 이전에 계획 가이드와 일치했던 쿼리의 향후 실행은 계획 가이드의 영향을 받지 않습니다.

  • DISABLE ALL

    현재 데이터베이스의 모든 계획 지침을 사용하지 않도록 설정합니다. @name 지정할 DISABLE ALL 수 없습니다.

  • ENABLE

    @name 지정한 계획 지침을 사용하도록 설정합니다. 계획 가이드를 사용하도록 설정한 후 적격 쿼리와 일치시킬 수 있습니다. 기본적으로 계획 가이드는 만들 때 사용하도록 설정됩니다.

  • ENABLE ALL

    현재 데이터베이스에 있는 모든 계획 지침을 활성화합니다. @name 지정할 ENABLE ALL 수 없습니다.

설명

계획 지침에서 참조하는 함수, 저장 프로시저 또는 DML 트리거를 삭제하거나 수정하려고 하면 오류가 발생합니다.

사용 중지된 계획 지침을 사용하지 않도록 설정하거나 사용 가능한 계획 지침을 사용하도록 설정해도 아무 효과가 없으며 오류 없이 실행됩니다.

계획 가이드는 SQL Server의 모든 버전에서 사용할 수 없습니다. SQL Server 버전에서 지원되는 기능 목록은 SQL Server 2022의 버전과 지원하는 기능을 참조하세요. 그러나 SQL Server의 모든 버전에서 또는 DROP ALL 옵션을 사용하여 실행할 sp_control_plan_guide DROP 수 있습니다.

사용 권한

sp_control_plan_guide 형식 OBJECT 의 계획 지침에서 실행(지정하여 @type = '<object>'만든)을 실행하려면 계획 가이드에서 참조하는 개체에 대한 권한이 필요합니다ALTER. 다른 모든 계획 가이드에는 사용 권한이 필요합니다 ALTER DATABASE .

예제

A. 계획 가이드 사용, 사용 안 함 및 삭제

다음 예제에서는 계획 지침을 만들고, 사용하지 않도록 설정하고, 사용하도록 설정하고, 삭제합니다.

--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. 현재 데이터베이스의 모든 계획 지침 사용 안 함

다음 예에서는 AdventureWorks2022 데이터베이스의 모든 계획 지침을 비활성화합니다.

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