다음을 통해 공유


sp_control_plan_guide(Transact-SQL)

계획 지침을 삭제하거나 활성화하거나 비활성화합니다.

항목 링크 아이콘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
    현재 데이터베이스에 있는 모든 계획 지침을 삭제합니다. DROP ALL이 지정되면 **N'**plan_guide_name 을 지정할 수 없습니다.
  • DISABLE
    plan_guide_name에 지정된 계획 지침을 비활성화합니다. 계획 지침이 비활성화된 후 이전에 이 계획 지침에 맞춘 쿼리를 실행할 경우 이 계획 지침의 영향을 받지 않습니다.
  • DISABLE ALL
    현재 데이터베이스에 있는 모든 계획 지침을 비활성화합니다. DISABLE ALL이 지정되면 **N'**plan_guide_name 을 지정할 수 없습니다.
  • ENABLE
    plan_guide_name에 지정된 계획 지침을 활성화합니다. 계획 지침을 활성화하면 적합한 쿼리에 맞출 수 있습니다. 기본적으로 계획 지침은 만들어질 때 활성화됩니다.
  • ENABLE ALL
    현재 데이터베이스에 있는 모든 계획 지침을 활성화합니다. ENABLE ALL이 지정되면 **N'plan_guide_name'****을 지정할 수 없습니다.

주의

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

비활성화된 계획 지침을 비활성화하거나 활성화된 계획 지침을 활성화하면 아무런 영향을 미치지 않고 오류 없이 실행됩니다.

Microsoft SQL Server 2005의 모든 버전에서 DROP 또는 DROP ALL 옵션을 사용하여 sp_control_plan_guide를 실행할 수 있습니다. 그러나 다른 모든 옵션은 표준 및 엔터프라이즈 버전에서만 사용할 수 있습니다.

사용 권한

**@type ='OBJECT'**를 지정하여 만든 OBJECT 유형의 계획 지침에 sp_control_plan_guide를 실행하려면 계획 지침이 참조하는 개체에 대한 ALTER 사용 권한이 필요합니다. 다른 모든 계획 지침에는 ALTER DATABASE 사용 권한이 필요합니다.

1. 계획 지침 활성화, 비활성화 및 삭제

다음 예에서는 계획 지침을 만들고 비활성화하고 활성화하고 삭제합니다.

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

2. 현재 데이터베이스에 있는 모든 계획 지침 비활성화

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

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

참고 항목

참조

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

관련 자료

계획 지침을 사용하여 배포된 응용 프로그램의 쿼리 최적화

도움말 및 정보

SQL Server 2005 지원 받기