계획 지침 디자인 및 구현

업데이트: 2007년 9월 15일

쿼리의 텍스트를 직접 변경할 수 없거나 변경하기를 원하지 않을 경우 계획 지침을 사용하여 쿼리의 성능을 최적화할 수 있습니다. 다음 컨텍스트에서 실행되는 쿼리와 일치하는 계획 지침을 만들 수 있습니다.

  • OBJECT 계획 지침은 Transact-SQL 저장 프로시저, 스칼라 함수, 다중 문 테이블 값 함수 및 DML 트리거의 컨텍스트에서 실행되는 쿼리와 일치합니다.
  • SQL 계획 지침은 데이터베이스 개체의 일부가 아닌 독립 실행형 Transact-SQL 문과 일괄 처리의 컨텍스트에서 실행되는 쿼리와 일치합니다. SQL 기반 계획 지침은 지정된 형식으로 매개 변수화되는 쿼리와 일치되도록 하는 데도 사용될 수 있습니다.
  • TEMPLATE 계획 지침은 지정된 형식으로 매개 변수화되는 독립 실행형 쿼리와 일치합니다. 이들 계획 지침은 쿼리 클래스에 대한 데이터베이스의 현재 PARAMETERIZATION 데이터베이스 SET 옵션을 재정의하는 데 사용됩니다.

[!참고] 계획 지침을 사용하는 것은 SQL Server 2005 Standard, Developer, Evaluation 및 Enterprise Edition에서만 가능하지만 보는 것은 어떤 버전에서도 가능합니다. 계획 지침이 포함된 데이터베이스를 모든 버전에 추가할 수 있습니다. 업그레이드된 버전의 SQL Server 2005에 데이터베이스를 복원하거나 첨부해도 계획 지침은 그대로 유지됩니다. 서버를 업그레이드한 후에는 각 데이터베이스의 계획 지침을 원활하게 사용할 수 있는지 확인해야 합니다.

sp_create_plan_guide@type = N'SQL' 또는 **@type = N'TEMPLATE'**을 지정하는 SQL 또는 TEMPLATE 기반 계획 지침을 위해 SQL Server는 두 값의 문자를 비교하여 @module_or_batch@params 인수의 값을 쿼리에 일치시킵니다. 따라서 SQL Server가 실제 일괄 처리에서 수신한 것과 똑같이 텍스트를 제공해야 합니다. 실제 일괄 처리 텍스트를 캡처하기 위해 SQL Server 프로파일러를 사용할 수 있습니다. 일반적으로 SQL Server 프로파일러를 사용해 쿼리가 계획 지침에 맞는지 확인하여 계획 지침을 테스트할 수 있습니다. SQL Server Management Studio에서 일괄 처리를 실행하여 SQL 또는 TEMPLATE 기반 계획 지침을 테스트하면 예기치 않은 결과를 얻을 수도 있습니다. 자세한 내용은 SQL Server 프로파일러를 사용하여 계획 지침 작성 및 테스트을 참조하십시오.

[!참고] 계획 지침을 만들려는 문이 포함된 일괄 처리는 USE database 문을 포함할 수 없습니다.

@type = 'SQL'이고 @module\_or\_batch가 NULL로 설정되면 @module\_or\_batch 값은 @stmt 값으로 설정됩니다. 이는 statement_text에 대한 값을 SQL Server에 제출된 것과 문자 수준까지 같은 형식으로 제공해야 한다는 것을 의미합니다. 이 일치 작업을 더 효과적으로 처리하기 위해 내부 변환은 수행되지 않습니다.

계획 지침의 범위는 이 지침이 생성되는 데이터베이스입니다. 따라서 쿼리를 실행할 때 현재 데이터베이스에 있는 계획 지침만 쿼리에 일치시킬 수 있습니다. 예를 들어 AdventureWorks가 현재 데이터베이스이면 다음 쿼리가 실행됩니다.

SELECT * FROM Person.Contact

AdventureWorks 데이터베이스의 계획 지침만 이 쿼리에 일치될 수 있습니다.

그러나 AdventureWorks가 현재 데이터베이스이면 다음 문이 실행됩니다.

USE DB1;
GO
SELECT * FROM Person.Contact;

쿼리가 DB1 컨텍스트에서 실행되므로 DB1의 계획 지침만 쿼리에 일치됩니다.

계획 지침에 모든 올바른 쿼리 힌트 조합을 사용할 수 있습니다. 계획 지침이 쿼리와 일치하면 컴파일 및 최적화하기 전에 계획 지침에 지정된 OPTION 절이 쿼리에 추가됩니다. 계획 지침에 일치하는 쿼리에 이미 OPTION 절이 있으면 계획 지침에 지정된 쿼리 힌트가 쿼리에서 이를 대체합니다. 그러나 이미 OPTION 절이 있는 쿼리에 계획 지침을 일치시키려면 해당 쿼리 텍스트를 지정할 때 sp_create_plan_guide 문이 쿼리의 OPTION 절을 포함해야 합니다. 계획 지침에 지정한 힌트로 이미 쿼리에 있는 힌트를 대체하는 대신 계획 지침에 지정한 힌트를 이미 쿼리에 있는 힌트에 추가하려면 원래 힌트와 추가 힌트를 모두 계획 지침의 OPTION 절에 지정해야 합니다.

만들 수 있는 총 계획 지침 수는 사용 가능한 시스템 리소스에 의해서만 제한됩니다. 그러나 성능 향상이나 안정화를 목적으로 하는 개별 쿼리에 한해서는 계획 지침 사용을 자제해야 합니다. 배포된 응용 프로그램의 쿼리 로드 대부분에 영향을 주기 위해 계획 지침을 사용하면 안 됩니다. 특히 USE PLAN 쿼리 힌트를 적용하는 계획 지침은 대상 쿼리에 대해 정해진 계획을 적용합니다. 따라서 쿼리 최적화 프로그램에서는 더 이상 통계 및 인덱스 변경 내용에 쿼리에 대한 계획을 적용할 수 없습니다.

USE PLAN 쿼리를 사용하는 계획 지침을 고려할 때는 정해진 계획을 적용하는 경우의 이점과 데이터 배포 및 사용 가능한 인덱스 변경 내용으로 계획을 자동 적용할 수 없는 경우의 이점을 비교해 보십시오.

새로운 릴리스의 SQL Server로 응용 프로그램을 업그레이드할 때는 계획 지침 정의를 다시 평가하고 테스트하는 것이 좋습니다. 성능 조정 요구 사항과 계획 지침 일치 동작은 변경될 수 있습니다.

계획 캐시에 대한 계획 지침 효과

모듈에 계획 지침을 만들면 해당 모듈에 대한 쿼리 계획이 계획 캐시에서 제거됩니다. 일괄 처리에 OBJECT 또는 SQL 유형의 계획 지침을 만들면 해시 값이 같은 일괄 처리에 대한 쿼리 계획이 제거됩니다. TEMPLATE 유형의 계획 지침을 만들면 데이터베이스 내의 계획 캐시에서 모든 단일 문 일괄 처리가 제거됩니다.

계획 지침을 만들려면

계획 지침을 사용하지 않거나 다시 사용하거나 삭제하려면

현재 데이터베이스에서 계획 지침에 대한 정보를 보려면

참고 항목

개념

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

관련 자료

쿼리 성능

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2007년 9월 15일

업데이트된 내용
  • @type = 'SQL'이고 @module_or_batch가 NULL로 설정된 경우 statement_text의 계획 지침 일치 요구 사항에 대한 설명을 추가했습니다.
  • 계획 캐시에 계획 지침을 만드는 데 따르는 영향에 대한 정보를 추가했습니다.