SQL Server에서 계획 지침을 쿼리에 대응시키는 방법
SQL Server는 OBJECT 유형의 계획 지침을 sp_create_plan_guide 저장 프로시저의 @module_or_batch 인수에서 명명된 저장 프로시저, 트리거 또는 함수(모듈) 내에 표시되는 쿼리에 대응시킵니다. 계획 지침이 모듈에 있는 경우 이 계획 지침은 지정된 쿼리와 대응됩니다.
일괄 처리 내에서 전송된 쿼리의 경우 SQL Server는 먼저 SQL 기반 계획 지침에 대해 쿼리를 대응한 다음 쿼리를 매개 변수화하고 다시 시도하여 계획 지침을 쿼리에 대응시킵니다. 다음 그림에서는 이러한 프로세스의 개요를 보여 줍니다.
SQL Server 쿼리 최적화 프로그램은 일괄 처리 내의 각 문을 컴파일하기 위한 요청으로 실행된 일괄 처리를 인식합니다.
일괄 처리 내에 있는 특정 문에 대해 SQL Server는 @module_or_batch 인수가 상수 리터럴 값을 포함한 들어오는 일괄 처리 텍스트와 일치하고 @stmt 인수가 일괄 처리의 문과도 일치하는 SQL 기반 계획 지침에 문을 대응시킵니다. 이러한 종류의 계획 지침이 있고 조건이 일치하면 계획 지침에 지정된 쿼리 힌트를 포함하도록 문 텍스트가 수정된 다음 문이 적절하게 컴파일됩니다.
계획 지침이 2단계의 문과 일치하지 않는 경우 SQL Server는 강제 매개 변수화를 사용하여 문을 매개 변수화하려고 시도합니다. 이 단계에서 다음과 같은 이유 중 하나로 인해 매개 변수화가 실패할 수 있습니다.
문이 이미 매개 변수화되었거나 로컬 변수가 들어 있습니다.
PARAMETERIZATION SIMPLE 데이터베이스의 SET 옵션이 적용되어 있고(기본 설정) 문에 적용되고 PARAMETERIZATION FORCED 쿼리 힌트를 지정하는 TEMPLATE 유형의 계획 지침이 없습니다.
문에 적용되고 PARAMETERIZATION SIMPLE 쿼리 힌트를 지정하는 TEMPLATE 유형의 계획 지침이 있습니다.
강제 매개 변수화가 성공하면 SQL Server는 문의 매개 변수화된 형식을 매개 변수화된 문에 생성된 SQL 유형의 계획 지침에 대응시키려고 시도합니다. 이러한 종류의 계획 지침이 있고 조건이 일치하면 계획 지침에 지정된 쿼리 힌트를 포함하도록 문 텍스트가 수정된 다음 문이 적절하게 컴파일됩니다. 이러한 계획 지침이 일치하지 않으면 계획 지침에 의해 먼저 수정되지 않고 매개 변수화된 문이 컴파일됩니다.
3단계에서 매개 변수화가 실패하면 SQL Server가 문을 다시 매개 변수화하려고 시도합니다. 이번에는 SQL Server가 간단한 기본 매개 변수화 동작을 적용합니다. 그러면 결과 쿼리가 직접 컴파일됩니다. 계획 지침은 간단한 매개 변수화의 결과와 일치하지 않습니다.
[!참고]
RECOMPILE 쿼리 힌트는 강제 또는 단순 매개 변수화를 통해 매개 변수화된 쿼리에 적용되는 SQL 유형의 계획 지침에서 무시됩니다. 또한 경고가 발생합니다.
참고 항목