sp_control_plan_guide(Transact-SQL)

적용 대상:SQL Server

계획 지침을 삭제, 사용 또는 사용하지 않도록 설정합니다.

Transact-SQL 구문 표기 규칙

구문

  
sp_control_plan_guide [ @operation = ] N'<control_option>'  
  [ , [ @name = ] N'plan_guide_name' ]  
  
<control_option>::=  
{   
    DROP   
  | DROP ALL  
  | DISABLE  
  | DISABLE ALL  
  | ENABLE   
  | ENABLE ALL  
}  

인수

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

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

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

DISABLE
plan_guide_name 지정한 계획 지침을 사용하지 않도록 설정합니다. 계획 지침이 비활성화된 후 이전에 이 계획 지침에 맞춘 쿼리를 실행할 경우 이 계획 지침의 영향을 받지 않습니다.

모두 사용 안 함
현재 데이터베이스의 모든 계획 지침을 사용하지 않도록 설정합니다. DISABLE ALL을 지정하면 N'plan_guide_name 지정할 수 없습니다.

ENABLE
plan_guide_name 지정한 계획 지침을 사용하도록 설정합니다. 계획 가이드를 사용하도록 설정한 후 적격 쿼리와 일치시킬 수 있습니다. 기본적으로 계획 지침은 생성될 때 사용하도록 설정됩니다.

모두 사용
현재 데이터베이스에 있는 모든 계획 지침을 활성화합니다. ENABLE ALL을 지정하면 N'plan_guide_name**'**을(를) 지정할 수 없습니다.

설명

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

비활성화된 계획 가이드를 사용하지 않도록 설정하거나 사용 가능한 계획 가이드를 사용하도록 설정해도 아무 효과가 없으며 오류 없이 실행됩니다.

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

사용 권한

OBJECT 형식의 계획 지침에서 sp_control_plan_guide 실행하려면(@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';  

B. 현재 데이터베이스에서 모든 계획 지침 사용 안 림

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

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

참고 항목

데이터베이스 엔진 저장 프로시저(Transact-SQL)
시스템 저장 프로시저(Transact-SQL)
sp_create_plan_guide(Transact-SQL)
sys.plan_guides(Transact-SQL)
계획 지침