sys.fn_validate_plan_guide(Transact-SQL)

적용 대상:SQL ServerAzure SQL Managed Instance

지정된 계획 가이드의 유효성을 확인합니다. 이 함수는 sys.fn_validate_plan_guide 계획 지침이 쿼리에 적용될 때 발생하는 첫 번째 오류 메시지를 반환합니다. 계획 지침이 유효하면 빈 행 집합이 반환됩니다. 데이터베이스의 물리적 디자인을 변경한 후 계획 지침이 유효하지 않은 상태가 될 수 있습니다. 예를 들어 계획 지침에서 특정 인덱스를 지정하고 이후에 해당 인덱스를 삭제하는 경우 쿼리는 더 이상 계획 지침을 사용할 수 없습니다.

계획 가이드의 유효성을 검사하여 수정 없이 최적화 프로그램에서 가이드를 사용할 수 있는지 여부를 확인할 수 있습니다. 작동 결과에 따라 계획 지침을 삭제할지 결정하고 쿼리를 반환하거나 데이터베이스 디자인을 수정할 수 있습니다. 예를 들어 계획 지침에 지정된 인덱스를 다시 만들어서 이 작업을 수행할 수 있습니다.

Transact-SQL 구문 표기 규칙

구문

sys.fn_validate_plan_guide ( plan_guide_id )  

인수

plan_guide_id
sys.plan_guides 카탈로그 뷰에 보고된 계획 가이드의 ID입니다. plan_guide_id 기본값이 없는 int입니다.

반환된 테이블

열 이름 데이터 형식 설명
msgnum int 오류 메시지의 ID입니다.
severity tinyint 메시지의 심각도 수준(1에서 25 사이)입니다.
state smallint 오류가 발생한 코드의 지점을 나타내는 오류의 상태 번호입니다.
message nvarchar(2048) 오류의 메시지 텍스트입니다.

사용 권한

OBJECT 범위 계획 가이드에는 참조된 개체에 대한 VIEW DEFINITION 또는 ALTER 권한과 계획 가이드에 제공된 쿼리 또는 일괄 처리를 컴파일할 수 있는 권한이 필요합니다. 예를 들어 일괄 처리에 SELECT 문이 포함된 경우 참조된 개체에 대한 SELECT 권한이 필요합니다.

SQL 또는 TEMPLATE 범위 계획 가이드에는 데이터베이스에 대한 ALTER 권한과 계획 가이드에 제공된 쿼리 또는 일괄 처리를 컴파일할 수 있는 권한이 필요합니다. 예를 들어 일괄 처리에 SELECT 문이 포함된 경우 참조된 개체에 대한 SELECT 권한이 필요합니다.

설명

sys.fn_validate_plan_guide 함수는 Azure SQL Database에서 사용할 수 없습니다.

A. 데이터베이스의 모든 계획 지침 유효성 검사

다음 예에서는 현재 데이터베이스에 있는 모든 계획 지침의 유효성을 확인합니다. 빈 결과 집합이 반환되면 모든 계획 지침을 사용할 수 있습니다.

USE AdventureWorks2022;  
GO  
SELECT plan_guide_id, msgnum, severity, state, message  
FROM sys.plan_guides  
CROSS APPLY fn_validate_plan_guide(plan_guide_id);  
GO  

B. 데이터베이스 변경 사항을 구현하기 전에 계획 가이드 유효성 검사 테스트

다음 예에서는 명시적 트랜잭션을 사용하여 인덱스를 삭제합니다. 이 sys.fn_validate_plan_guide 함수는 이 작업이 데이터베이스의 계획 지침을 무효화할지 여부를 결정하기 위해 실행됩니다. 함수 DROP INDEX 의 결과에 따라 문이 커밋되거나 트랜잭션이 롤백되고 인덱스가 삭제되지 않습니다.

USE AdventureWorks2022;  
GO  
BEGIN TRANSACTION;  
DROP INDEX IX_SalesOrderHeader_CustomerID ON Sales.SalesOrderHeader;  
-- Check for invalid plan guides.  
IF EXISTS (SELECT plan_guide_id, msgnum, severity, state, message  
           FROM sys.plan_guides  
           CROSS APPLY sys.fn_validate_plan_guide(plan_guide_id))  
    ROLLBACK TRANSACTION;  
ELSE  
    COMMIT TRANSACTION;  
GO  

참고 항목

계획 지침
sp_create_plan_guide(Transact-SQL)
sp_create_plan_guide_from_handle(Transact-SQL)