sys.query_store_plan(Transact-SQL)
적용 대상: SQL Server 2016 (13.x) 이상 Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics
쿼리와 연결된 각 실행 계획에 대한 정보를 포함합니다.
열 이름 | 데이터 형식 | 설명 |
---|---|---|
plan_id |
bigint | 기본 키. |
query_id |
bigint | 외래 키입니다. sys.query_store_query(Transact-SQL)에 조인합니다. |
plan_group_id |
bigint | 계획 그룹의 ID입니다. 커서 쿼리에는 일반적으로 여러 계획(채우기 및 페치)이 필요합니다. 함께 컴파일된 채우기 및 페치 계획은 동일한 그룹에 있습니다.0 는 계획이 그룹에 있지 않음을 의미합니다. |
engine_version |
nvarchar(32) | 계획을 <major>.<minor>.<build>.<revision> 컴파일하는 데 사용되는 엔진의 버전입니다. |
compatibility_level |
smallint | 쿼리에서 참조되는 데이터베이스의 데이터베이스 호환성 수준입니다. |
query_plan_hash |
binary(8) | 개별 계획의 MD5 해시입니다. |
query_plan |
nvarchar(max) | 쿼리 계획에 대한 실행 계획 XML입니다. |
is_online_index_plan |
bit | 계획이 온라인 인덱스 빌드 중에 사용되었습니다. 참고: Azure Synapse Analytics는 항상 반환합니다 0 . |
is_trivial_plan |
bit | 계획이 중요하지 않은 계획입니다(쿼리 최적화 프로그램의 0단계 출력). 참고: Azure Synapse Analytics는 항상 반환합니다 0 . |
is_parallel_plan |
bit | 계획이 병렬입니다. 참고: Azure Synapse Analytics는 항상 반환합니다 1 . |
is_forced_plan |
bit | 사용자가 저장 프로시저 sys.sp_query_store_force_plan 를 실행할 때 계획이 강제로 표시됩니다. 강제 메커니즘은 이 정확한 계획이 참조되는 query_id 쿼리에 사용된다는 것을 보장하지 않습니다. 계획 강제 적용으로 인해 쿼리가 다시 컴파일되며 일반적으로 참조 plan_id 되는 계획과 정확히 동일하거나 유사한 계획을 생성합니다. 계획 강제 작업이 성공 force_failure_count 하지 못하면 증가하며 last_force_failure_reason 실패 원인으로 채워집니다.참고: Azure Synapse Analytics는 항상 반환합니다 0 . |
is_natively_compiled |
bit | 계획에 고유하게 컴파일된 메모리 최적화 프로시저가 포함됩니다. (0 = FALSE , 1 = TRUE ).참고: Azure Synapse Analytics는 항상 반환합니다 0 . |
force_failure_count |
bigint | 이 계획을 강제 적용하는 데 실패한 횟수입니다. 쿼리가 다시 컴파일될 때만 증가될 수 있습니다(모든 실행에서는 증가하지 않음). 으로 0 변경 FALSE TRUE 될 때마다 is_plan_forced 다시 설정됩니다.참고: Azure Synapse Analytics는 항상 반환합니다 0 . |
last_force_failure_reason |
int | 계획 강제 적용이 실패한 이유입니다. 0: 실패 없음, 그렇지 않으면 강제 적용 실패를 초래한 오류의 오류 번호 3617: COMPILATION_ABORTED_BY_CLIENT 8637: ONLINE_INDEX_BUILD 8675: OPTIMIZATION_REPLAY_FAILED 8683: INVALID_STARJOIN 8684: TIME_OUT 8689: NO_DB 8690: HINT_CONFLICT 8691: SETOPT_CONFLICT 8694: DQ_NO_FORCING_SUPPORTED 8698: NO_PLAN 8712: NO_INDEX 8713: VIEW_COMPILE_FAILED <기타 값>: GENERAL_FAILURE 참고: Azure Synapse Analytics는 항상 반환합니다 0 . |
last_force_failure_reason_desc |
nvarchar(128) | 에 대한 텍스트 설명입니다 last_force_failure_reason .COMPILATION_ABORTED_BY_CLIENT : 완료하기 전에 클라이언트가 쿼리 컴파일을 중단했습니다.ONLINE_INDEX_BUILD : 대상 테이블에 온라인으로 빌드되는 인덱스가 있는 동안 쿼리에서 데이터 수정을 시도합니다.OPTIMIZATION_REPLAY_FAILED : 최적화 재생 스크립트를 실행하지 못했습니다.INVALID_STARJOIN : 계획에 잘못된 StarJoin 사양이 포함되어 있습니다.TIME_OUT : 최적화 프로그램이 강제 계획으로 지정된 계획을 검색하는 동안 허용되는 작업 수를 초과했습니다.NO_DB : 계획에 지정된 데이터베이스가 없습니다.HINT_CONFLICT : 계획이 쿼리 힌트와 충돌하므로 쿼리를 컴파일할 수 없습니다.DQ_NO_FORCING_SUPPORTED : 계획이 분산 쿼리 또는 전체 텍스트 작업의 사용과 충돌하므로 쿼리를 실행할 수 없습니다.NO_PLAN : 강제 계획을 쿼리에 유효한 것으로 확인할 수 없으므로 쿼리 프로세서에서 쿼리 계획을 생성할 수 없습니다.NO_INDEX : 계획에 지정된 인덱스가 더 이상 존재하지 않습니다.VIEW_COMPILE_FAILED : 계획에서 참조된 인덱싱된 뷰의 문제로 인해 쿼리 계획을 강제 적용할 수 없습니다.GENERAL_FAILURE : 일반 강제 오류(다른 이유로 다루지 않음)참고: Azure Synapse Analytics는 항상 반환합니다 NONE . |
count_compiles |
bigint | 계획 컴파일 통계입니다. |
initial_compile_start_time |
datetimeoffset | 계획 컴파일 통계입니다. |
last_compile_start_time |
datetimeoffset | 계획 컴파일 통계입니다. |
last_execution_time |
datetimeoffset | 마지막 실행 시간은 쿼리/계획의 마지막 종료 시간을 나타냅니다. |
avg_compile_duration |
float | 컴파일 통계를 마이크로초로 계획합니다. 초를 얻으려면 1,000,000으로 나눕니다. |
last_compile_duration |
bigint | 컴파일 통계를 마이크로초로 계획합니다. 초를 얻으려면 1,000,000으로 나눕니다. |
plan_forcing_type |
int | 적용 대상: SQL Server 2017(14.x) 이상 버전 계획 강제 적용 유형입니다. 0: NONE 1: MANUAL 2: AUTO |
plan_forcing_type_desc |
nvarchar(60) | 적용 대상: SQL Server 2017(14.x) 이상 버전 에 대한 텍스트 설명입니다 plan_forcing_type .NONE : 강제 계획 없음MANUAL : 사용자가 강제 적용하는 계획AUTO : 자동 튜닝을 통해 강제로 계획합니다. |
has_compile_replay_script |
bit | 적용 대상: SQL Server 2022(16.x) 이상 버전 계획과 연결된 최적화 재생 스크립트가 있는지 여부를 나타냅니다. 0 = 최적화 재생 스크립트가 없습니다(없음 또는 유효하지 않음). 1 = 최적화 재생 스크립트가 기록되었습니다. Azure Synapse Analytics에는 적용되지 않습니다. |
is_optimized_plan_forcing_disabled |
bit | 적용 대상: SQL Server 2022(16.x) 이상 버전 계획에 대해 최적화된 계획 강제 적용이 비활성화되었는지 여부를 나타냅니다. 0 = 사용 안 함 1 = 사용. Azure Synapse Analytics에는 적용되지 않습니다. |
plan_type |
int | 적용 대상: SQL Server 2022(16.x) 이상 버전 계획 유형입니다. 0: 컴파일된 계획 1: 디스패처 플랜 2: 쿼리 변형 계획 Azure Synapse Analytics에는 적용되지 않습니다. |
plan_type_desc |
nvarchar(120) | 적용 대상: SQL Server 2022(16.x) 이상 버전 계획 유형에 대한 텍스트 설명입니다. 컴파일된 계획: 계획이 매개 변수가 아닌 중요한 계획 최적화 계획임을 나타냅니다. 디스패처 계획: 계획이 매개 변수에 중요한 계획 최적화 디스패처 계획임을 나타냅니다. 쿼리 변형 계획: 계획이 매개 변수에 민감한 계획 최적화 쿼리 변형 계획임을 나타냅니다. Azure Synapse Analytics에는 적용되지 않습니다. |
설명
보조 복제본에 대한 쿼리 저장소 사용하도록 설정된 경우 두 개 이상의 계획을 강제로 적용할 수 있습니다.
Azure Synapse Analytics에서 열 has_compile_replay_script
, plan_type_desc
is_optimized_plan_forcing_disabled
plan_type
열을 사용하면 지원되지 않으므로 오류가 발생 Invalid Column Name
합니다. Azure Synapse Analytics에서 사용하는 sys.query_store_plan
방법의 예제는 예제 B를 참조하세요.
강제 적용 제한 계획
쿼리 저장소 특정 실행 계획을 사용하도록 쿼리 최적화 프로그램에서 적용하는 메커니즘이 있습니다. 그러나 계획을 적용하지 못할 수 있는 몇 가지 제한 사항이 있습니다.
첫째, 계획에 다음과 같은 구성이 포함된 경우
- 대량 문 삽입
- 외부 테이블에 대한 참조
- 분산 쿼리 또는 전체 텍스트 작업
- 탄력적 쿼리 사용
- 동적 또는 키 집합 커서
- 별 조인 사양이 잘못되었습니다.
참고 항목
Azure SQL Database 및 SQL Server 2019 이상 빌드 버전은 정적 및 빠른 전달 커서를 강제하는 계획을 지원합니다.
둘째, 계획에서 사용하는 개체를 더 이상 사용할 수 없습니다.
- 데이터베이스(계획이 시작된 데이터베이스가 더 이상 존재하지 않는 경우)
- 인덱스(더 이상 없거나 사용하지 않도록 설정됨)
마지막으로, 계획 자체에 문제가 있는 경우
- 쿼리에 적합하지 않음
- 쿼리 최적화 프로그램이 허용되는 작업 수를 초과했습니다.
- 잘못된 형식의 계획 XML
사용 권한
VIEW DATABASE STATE
권한이 필요합니다.
예제
A. SQL Server가 QDS를 통해 계획을 강제로 적용할 수 없는 이유 찾기
열 및 force_failure_count
열에 last_force_failure_reason_desc
주의하세요.
SELECT TOP 1000
p.query_id,
p.plan_id,
p.last_force_failure_reason_desc,
p.force_failure_count,
p.last_compile_start_time,
p.last_execution_time,
q.last_bind_duration,
q.query_parameterization_type_desc,
q.context_settings_id,
c.set_options,
c.STATUS
FROM sys.query_store_plan p
INNER JOIN sys.query_store_query q
ON p.query_id = q.query_id
INNER JOIN sys.query_context_settings c
ON c.context_settings_id = q.context_settings_id
LEFT JOIN sys.query_store_query_text t
ON q.query_text_id = t.query_text_id
WHERE p.is_forced_plan = 1
AND p.last_force_failure_reason != 0;
B. Azure Synapse Analytics에서 쿼리 계획 결과를 보기 위한 쿼리
다음 샘플 쿼리를 사용하여 Azure Synapse Analytics의 쿼리 저장소 100개의 가장 최근 실행 계획을 찾습니다.
SELECT TOP 100
plan_id,
query_id,
plan_group_id,
engine_version,
compatibility_level,
query_plan_hash,
query_plan,
is_online_index_plan,
is_trivial_plan,
is_parallel_plan,
is_forced_plan,
is_natively_compiled,
force_failure_count,
last_force_failure_reason,
last_force_failure_reason_desc,
count_compiles,
initial_compile_start_time,
last_compile_start_time,
last_execution_time,
avg_compile_duration,
last_compile_duration,
plan_forcing_type,
plan_forcing_type_desc
FROM sys.query_store_plan
ORDER BY last_execution_time DESC;
관련 콘텐츠
- 쿼리 저장소를 사용하여 성능 모니터링
- sys.database_query_store_options(Transact-SQL)
- sys.query_context_settings(Transact-SQL)
- sys.query_store_query(Transact-SQL)
- sys.query_store_query_text(Transact-SQL)
- sys.query_store_runtime_stats(Transact-SQL)
- sys.query_store_wait_stats(Transact-SQL)
- sys.query_store_runtime_stats_interval(Transact-SQL)
- 시스템 카탈로그 뷰(Transact-SQL)
- 쿼리 저장소 저장 프로시저(Transact-SQL)