계획 강제 적용 이해
USE PLAN 쿼리 힌트를 사용하면 쿼리 최적화 프로그램이 쿼리에 대해 지정된 쿼리 계획을 사용하도록 강제 적용할 수 있습니다. USE PLAN 쿼리 힌트는 XML 서식에서 인수로 사용하려는 쿼리 계획을 허용함으로써 작동합니다. USE PLAN은 쿼리 계획으로 인해 실행 시간은 느려지지만 더 나은 쿼리 계획을 만들 수 있는 쿼리에 대해 사용할 수 있습니다. 이에 대한 일반적인 경우로는 초기 버전의 SQL Server에서는 잘 실행되었지만 업그레이드된 버전(서비스 팩 업그레이드 및 전체 버전 업그레이드 포함)에서는 실행 성능이 낮은 쿼리를 예로 들 수 있습니다. 대부분 업그레이드를 수행하면 대부분의 쿼리 실행 시간에 있어서 동일하거나 더 나은 성능을 보이지만, 일부 예외가 있을 수 있습니다. USE PLAN 쿼리 힌트를 사용하면 이전 버전의 제품에서 쿼리 최적화 프로그램에 의해 선택된 쿼리 계획이 업그레이드 이후 선택된 쿼리 계획보다 선호되는 경우 이러한 문제를 해결할 수 있습니다.
USE PLAN 쿼리 힌트는 배포된 응용 프로그램에서 쿼리의 낮은 성능 문제를 해결할 때 계획 지침과 함께 사용될 수 있습니다. 계획 지침은 응용 프로그램을 직접적으로 변경할 수 없거나 변경하길 원하지 않는 경우에 쿼리에 쿼리 힌트를 적용하는 데 사용됩니다. 계획 지침에 대한 자세한 내용은 계획 지침을 사용하여 배포된 응용 프로그램의 쿼리 최적화를 참조하십시오. 계획 지침에 USE PLAN 쿼리 힌트를 적용하는 방법을 보여 주는 세부 시나리오에 대한 자세한 내용은 계획 적용 시나리오: 쿼리 계획을 지정하는 계획 지침 작성 및 계획 적용 시나리오: 다시 작성한 쿼리에서 얻은 계획을 적용할 계획 지침 만들기를 참조하십시오.
계획 강제 적용은 대부분의 쿼리 유형에 대해 사용할 수 있습니다. 여기에는 테이블, 클러스터형 및 비클러스터형 인덱스, 인덱싱된 뷰 및 분할된 테이블 및 인덱스에 대한 쿼리가 포함됩니다. USE PLAN은 INSERT, UPDATE, MERGE, DELETE 등의 DML(데이터 조작 언어) 문에서 지정할 수 있습니다. 인덱스 추가 또는 삭제와 같이 데이터베이스 스키마가 변경되면 USE PLAN 힌트에 지정된 계획이 무효화될 수 있습니다. USE PLAN이 쿼리에 직접 지정되면 잘못된 계획으로 인해 쿼리가 실패합니다. USE PLAN이 계획 지침에 지정되면 잘못된 계획으로 인해 쿼리가 실패하지는 않지만 힌트를 사용하지 않은 채 계획이 컴파일되므로 최상의 선택이 아닐 수 있습니다. USE PLAN 힌트가 계획 지침 내에 사용되면 sys.fn_validate_plan_guide 함수를 사용하여 계획의 유효성을 확인할 수 있습니다. 함수의 결과에 따라 계획 지침을 삭제할지 결정하고 쿼리를 반환하거나 데이터베이스 디자인을 수정할 수 있습니다. 예를 들어 계획 지침에 지정된 인덱스를 다시 만들 수도 있습니다.
USE PLAN 쿼리 힌트를 사용하여 생성된 쿼리 계획은 다른 쿼리 계획과 마찬가지로 캐시됩니다.
계획 강제 적용에 대한 제한 사항
계획 강제 적용에서 쿼리는 단일 정적 실행 계획으로 제한됩니다. 계획을 강제로 적용하면 쿼리 최적화 프로그램에서 변경되는 데이터 크기와 배포, 새 인덱스 및 기타 변수를 적용할 수 없습니다. 따라서 쿼리 강제 적용을 잘못 사용하면 성능 문제가 발생할 수 있습니다. 새로 고침, 정확한 통계 및 최적화된 인덱스 등과 같은 쿼리 성능 향상을 위해 다른 옵션을 모두 사용한 다음에만 쿼리 강제 적용을 사용해야 합니다. 쿼리 강제 적용은 성능 문제와 해당 데이터베이스 및 응용 프로그램의 변화하는 환경에 대해 잘 알고 있는 숙련된 데이터베이스 관리자와 개발자에 의해서만 제한적으로 사용되어야 합니다.
USE PLAN 쿼리 힌트를 사용하여 배포된 응용 프로그램에서 쿼리 컴파일을 영향을 주고자 할 경우 이 힌트는 응용 프로그램에 직접 포함시키는 대신 계획 지침 내에서 사용되어야 합니다. 이렇게 하면 다음과 같은 문제를 해결할 수 있습니다.
응용 프로그램을 수정하거나 다시 컴파일할 필요 없이 힌트를 변경하거나 제거할 수 있습니다. 제한적인 경우에 SQL Server 특정 버전에 적용된 USE PLAN 힌트가 이후 서비스 팩이나 다른 버전에서 적용되지 않을 수 있습니다. 따라서 응용 프로그램을 배포한 다음 USE PLAN 힌트를 변경하거나 제거해야 할 수 있습니다.
쿼리에 직접 큰 힌트를 사용하지 않을 수 있습니다. 따라서 쿼리의 가독성이 높아집니다.
중요 USE PLAN을 사용하는 계획 지침을 만들 때는 테스트 중에 강제로 적용하려는 쿼리 계획이 일반적으로 커서 요청과 함께 전송되는지 여부를 확인해야 합니다. 커서 기반 쿼리에 대한 쿼리 계획은 비커서 쿼리와 다릅니다. 따라서 커서 요청과 함께 전송되는 쿼리에 적용할 USE PLAN 힌트를 지정하는 계획 지침을 만들려면 계획 지침에서 커서 계획을 지정해야 합니다. 자세한 내용은 커서 쿼리에서 USE PLAN 쿼리 힌트 사용을 참조하십시오.
다음 유형의 쿼리에는 계획 강제 적용이 지원되지 않습니다.
동적의 키 집합 기반, 정방향 전용 커서가 포함된 쿼리. 정적의 빠른 정방향 전용 커서는 지원됩니다. 자세한 내용은 커서 쿼리에서 USE PLAN 쿼리 힌트 사용을 참조하십시오.
분산 쿼리
전체 텍스트 쿼리