sys.query_store_plan(Transact-SQL)

적용 대상: Microsoft Fabric의 SQL Server 2016(13.x) 이상 버전 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL 데이터베이스

쿼리와 연결된 각 실행 계획에 대한 정보를 포함합니다.

열 이름 데이터 형식 설명
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를 실행할 때 계획이 강제로 표시됩니다. 강제 메커니즘하지 않습니다. 계획 강제 적용으로 인해 쿼리가 다시 컴파일되며 일반적으로 참조 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 변경 is_forced_planFALSE될 때마다 TRUE 다시 설정됩니다.

참고: 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, is_optimized_plan_forcing_disabledplan_typeplan_type_desc열을 사용하면 지원되지 않으므로 오류가 발생 Invalid Column Name 합니다. Azure Synapse Analytics에서 사용하는 방법의 예제는 예제 Bsys.query_store_plan하세요.

강제 적용 제한 계획

쿼리 저장소 특정 실행 계획을 사용하도록 쿼리 최적화 프로그램에서 적용하는 메커니즘이 있습니다. 그러나 계획을 적용하지 못할 수 있는 몇 가지 제한 사항이 있습니다.

첫째, 계획에 다음과 같은 구성이 포함된 경우

  • 대량 문 삽입
  • 외부 테이블에 대한 참조
  • 분산 쿼리 또는 전체 텍스트 작업
  • 탄력적 쿼리 사용
  • 동적 또는 키 집합 커서
  • 별 조인 사양이 잘못되었습니다.

참고 항목

Azure SQL Database 및 SQL Server 2019 이상 빌드 버전은 정적 및 빠른 전달 커서를 강제하는 계획을 지원합니다.

둘째, 계획에서 사용하는 개체를 더 이상 사용할 수 없습니다.

  • 데이터베이스(계획이 시작된 데이터베이스가 더 이상 존재하지 않는 경우)
  • 인덱스(더 이상 없거나 사용하지 않도록 설정됨)

마지막으로, 계획 자체에 문제가 있는 경우

  • 쿼리에 적합하지 않음
  • 쿼리 최적화 프로그램이 허용되는 작업 수를 초과했습니다.
  • 잘못된 형식의 계획 XML

사용 권한

VIEW DATABASE STATE 권한이 필요합니다.

SQL Server 2022 이상에 대한 권한

데이터베이스에 대한 VIEW DATABASE PERFORMANCE STATE 권한이 필요합니다.

예제

A. SQL Server가 QDS를 통해 계획을 강제로 적용할 수 없는 이유 찾기

열 및 last_force_failure_reason_desc 열에 force_failure_count 주의하세요.

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;