쿼리 저장소 힌트 모범 사례
적용 대상: Microsoft Fabric의 SQL Server 2022(16.x) Azure SQL Database Azure SQL Managed Instance SQL 데이터베이스
이 문서에서는 쿼리 저장소 힌트를 사용하기 위한 모범 사례를 자세히 설명합니다. 쿼리 저장소 힌트를 사용하면 애플리케이션 코드를 수정하지 않고 쿼리 계획 셰이프를 셰이핑할 수 있습니다.
- 쿼리 저장소를 구성하고 관리하는 방법에 대한 자세한 내용은 쿼리 저장소를 사용하여 성능 모니터링을 참조하세요.
- 실행 가능한 정보를 검색하고 쿼리 저장소 사용하여 성능을 조정하는 방법에 대한 자세한 내용은 쿼리 저장소를 사용하여 성능 조정을 참조하세요.
쿼리 저장소 힌트에 대한 사용 사례
다음 사용 사례는 쿼리 저장소 힌트에 적합합니다. 자세한 내용은 쿼리 저장소 힌트를 사용하는 경우를 참조하세요.
주의
SQL Server 쿼리 최적화 프로그램은 일반적으로 쿼리에 대해 최적의 실행 계획을 선택하므로 힌트는 숙련된 개발자나 데이터베이스 관리자가 최후의 수단으로만 사용하는 것이 좋습니다. 자세한 내용은 쿼리 힌트를 참조하세요.
코드를 변경할 수 없는 경우
쿼리 저장소 힌트를 사용하면 애플리케이션 코드 또는 데이터베이스 개체를 변경하지 않고 쿼리의 실행 계획에 영향을 줄 수 있습니다. 쿼리 힌트를 빠르고 쉽게 적용할 수 있는 다른 기능은 없습니다.
예를 들어 쿼리 저장소 힌트를 사용하여 코드를 다시 배포하지 않고 ETL을 활용할 수 있습니다. 이 14분 분량의 비디오를 통해 쿼리 저장소 힌트를 사용하여 대량 로드를 개선하는 방법을 알아봅니다.
쿼리 저장소 힌트는 간단한 쿼리 튜닝 메서드이지만 쿼리가 문제가 되면 보다 실질적인 코드 변경으로 해결해야 합니다. 쿼리에 정기적으로 쿼리 저장소 힌트를 적용할 필요성을 찾는 경우 더 큰 쿼리를 다시 작성하는 것이 좋습니다. SQL Server 쿼리 최적화 프로그램은 일반적으로 쿼리에 대해 최적의 실행 계획을 선택하므로 힌트는 숙련된 개발자나 데이터베이스 관리자가 최후의 수단으로만 사용하는 것이 좋습니다.
어떤 쿼리 힌트를 적용할 수 있는지에 대한 자세한 내용은 지원되는 쿼리 힌트를 참조하세요.
높은 트랜잭션 부하 또는 중요 업무용 코드 사용
가동 시간 요구 사항 또는 트랜잭션 부하로 인해 코드 변경이 비현실적인 경우 쿼리 저장소 힌트는 기존 쿼리 워크로드에 쿼리 힌트를 신속하게 적용할 수 있습니다. 쿼리 저장소 힌트를 추가하고 제거하는 것은 쉽습니다.
쿼리 저장소 힌트를 쿼리 일괄 처리에 추가하고 제거하여 뛰어난 워크로드 버스트에 대한 시간 제한 기간의 성능을 조정할 수 있습니다.
계획 가이드를 대체합니다.
쿼리 저장소 힌트 이전에는 개발자가 계획 지침에 의존하여 사용하기 복잡할 수 있는 유사한 작업을 수행해야 했습니다. 쿼리 저장소 힌트는 쿼리의 시각적 탐색을 위해 SQL Server Management Studio(SSMS)의 쿼리 저장소 기능과 통합됩니다.
계획 가이드를 사용하면 쿼리 조각을 사용하여 모든 계획을 검색해야 합니다. 쿼리 저장소 힌트 기능은 결과 쿼리 계획에 영향을 주기 위해 정확히 일치하는 쿼리가 필요하지 않습니다. 쿼리 저장소 힌트는 쿼리 저장소 데이터 세트의 query_id
에 적용할 수 있습니다.
쿼리 저장소 힌트는 하드 코드된 문 수준의 힌트와 기존 계획 지침을 재정의합니다.
최신 호환성 수준 고려
쿼리 저장소 힌트는 공급업체 사양 또는 더 큰 테스트 지연으로 인해 최신 데이터베이스 호환성 수준을 사용할 수 없는 경우 유용한 방법이 될 수 있습니다. 데이터베이스에서 개별 쿼리의 더 높은 호환성 수준을 사용할 수 있는 경우 SQL Server의 최신 성능 최적화 및 기능을 활용하도록 데이터베이스 호환성 수준을 업그레이드하는 것이 좋습니다.
예를 들어 호환성 수준이 140인 데이터베이스가 포함된 SQL Server 2022(16.x) 인스턴스가 있는 경우에도 쿼리 저장소 힌트를 사용하여 호환성 수준 160에서 개별 쿼리를 실행할 수 있습니다. 다음 힌트를 사용할 수 있습니다.
EXEC sys.sp_query_store_set_hints @query_id= 39, @query_hints = N'OPTION(USE HINT(''QUERY_OPTIMIZER_COMPATIBILITY_LEVEL_160''))';
전체 자습서는 쿼리 저장소 힌트 예제를 참조하세요.
업그레이드 후 이전 호환성 수준 고려
쿼리 저장소 힌트가 도움이 될 수 있는 또 다른 경우는 SQL Server 인스턴스 마이그레이션 또는 업그레이드 후에 쿼리를 직접 수정할 수 없는 경우입니다. 쿼리 저장소 힌트를 사용하여 쿼리를 다시 작성하거나 최신 호환성 수준에서 정상적인 성능을 발휘하도록 주소를 지정할 수 있을 때까지 쿼리에 대한 이전 호환성 수준을 적용합니다. 마이그레이션 중에 쿼리 튜닝 관리자 도구 또는 기타 쿼리 수준 애플리케이션 원격 분석을 사용하여 쿼리 저장소 회귀된 쿼리 보고서로 더 높은 호환성 수준에서 회귀된 이상값 쿼리를 식별합니다. 호환성 수준 간의 차이점에 대한 자세한 내용은 호환성 수준 간의 차이점을 참조하세요.
새 호환성 수준을 성능 테스트하고 이러한 방식으로 쿼리 저장소 힌트를 배포한 후에는 코드 변경 없이 문제가 있는 주요 쿼리를 이전 호환성 수준으로 유지하면서 전체 데이터베이스의 호환성 수준을 업그레이드할 수 있습니다.
쿼리 저장소 힌트 고려 사항
쿼리 저장소 힌트를 배포할 때 다음 시나리오를 고려합니다.
데이터 배포 변경 내용
계획 지침, 쿼리 저장소를 통한 강제 적용 계획 및 쿼리 저장소 힌트는 최적화 프로그램의 의사 결정을 재정의합니다. 쿼리 저장소 힌트는 지금 도움이 될 수 있지만 미래에는 도움이 되지 않습니다. 예를 들어 쿼리 저장소 힌트가 이전 데이터 배포의 쿼리에 도움이 되는 경우 대규모 DML 작업에서 데이터를 변경하면 비생산적일 수 있습니다. 새 데이터 배포로 인해 최적화 프로그램이 힌트보다 더 나은 결정을 내릴 수 있습니다. 이 시나리오는 강제 적용 계획 동작의 가장 일반적인 결과입니다.
정기적으로 쿼리 저장소 힌트 전략을 다시 평가합니다.
다음과 같은 경우 기존 쿼리 저장소 힌트 전략을 다시 평가합니다.
- 알려진 대용량 데이터 배포 변경 후
- Azure SQL Database 또는 Managed Instance 또는 가상 머신의 SLO(서비스 수준 목표)가 변경된 경우
- 계획 수정이 오래 지속되는 경우 쿼리 저장소 힌트는 단기 수정에 가장 적합합니다.
- 예기치 않은 성능 회귀
광범위한 영향 가능성
쿼리 저장소 힌트는 매개 변수 집합, 원본 애플리케이션, 사용자 또는 결과 집합에 관계없이 쿼리의 모든 실행에 영향을 줍니다. 실수로 성능이 저하되는 경우 sys.sp_query_store_clear_hints로 sys.sp_query_store_set_hints를 사용하여 만든 쿼리 저장소 힌트를 쉽게 제거할 수 있습니다.
프로덕션 환경에서 쿼리 저장소 힌트를 적용하기 전에 중요한 업무용 또는 중요한 시스템에 대한 테스트 변경 내용을 신중하게 로드합니다.
강제 매개 변수화 및 RECOMPILE 힌트는 지원되지 않습니다.
데이터베이스 옵션 되어 있는 경우 쿼리 저장소 힌트를 사용하여 RECOMPILE 쿼리 힌트를 적용하는 것은 지원되지 않습니다. 자세한 내용은 강제 매개 변수화 사용 지침을 참조하세요.
RECOMPILE 힌트는 데이터베이스 수준에서 설정된 강제 매개 변수화와 호환되지 않습니다. 데이터베이스에 강제 매개 변수화 집합이 있고 RECOMPILE 힌트가 쿼리에 대해 쿼리 저장소 설정된 힌트 문자열의 일부인 경우 데이터베이스 엔진 RECOMPILE 힌트를 무시하고 활용하면 다른 힌트를 적용합니다. 또한 2022년 7월부터 Azure SQL 데이터베이스에서 RECOMPILE 힌트가 무시되었다는 경고(오류 코드 12461)가 실행됩니다.
어떤 쿼리 힌트를 적용할 수 있는지에 대한 자세한 내용은 지원되는 쿼리 힌트를 참조하세요.
참고 항목
- 쿼리 저장소 힌트
- sys.query_store_query_hints(Transact-SQL)
- sys.sp_query_store_set_hints(Transact-SQL)
- sys.sp_query_store_clear_hints(Transact-SQL)
- XML 형식으로 실행 계획 저장
- 실행 계획 표시 및 저장
- 힌트(Transact-SQL) - 쿼리