다음을 통해 공유


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_disabledplan_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;