Dela via


sys.query_store_plan (Transact-SQL)

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Innehåller information om varje körningsplan som är associerad med en fråga.

Kolumnnamn Datatyp Description
plan_id bigint Primär nyckel.
query_id bigint Sekundärnyckel. Ansluter till sys.query_store_query (Transact-SQL).
plan_group_id bigint ID för plangruppen. Markören frågor kräver vanligtvis flera (fylla och hämta) planer. Fyll i och hämta planer som kompileras tillsammans finns i samma grupp.

0 innebär att planen inte finns i en grupp.
engine_version nvarchar(32) Version av motorn som används för att kompilera planen i <major>.<minor>.<build>.<revision> format.
compatibility_level smallint Databaskompatibilitetsnivån för databasen som refereras i frågan.
query_plan_hash binär(8) MD5-hash för den enskilda planen.
query_plan nvarchar(max) Showplan XML för frågeplanen.
is_online_index_plan bit Planen användes under en onlineindexversion.

Not: Azure Synapse Analytics returnerar 0alltid .
is_trivial_plan bit Plan är en trivial plan (utdata i steg 0 i frågeoptimeraren).

Not: Azure Synapse Analytics returnerar 0alltid .
is_parallel_plan bit Planen är parallell.

Not: Azure Synapse Analytics returnerar 1alltid .
is_forced_plan bit Planen markeras som tvingad när användaren kör den lagrade proceduren sys.sp_query_store_force_plan. Den tvingande mekanismen garanterar inte att den här exakta planen används för frågan som refereras av query_id. Plantvingning gör att frågan kompileras igen och producerar vanligtvis exakt samma plan eller en liknande plan som planen som refereras av plan_id. Om planens framtvingande inte lyckas, force_failure_count ökas och last_force_failure_reason fylls i med felorsaken.

Not: Azure Synapse Analytics returnerar 0alltid .
is_natively_compiled bit Planen innehåller internt kompilerade minnesoptimerade procedurer. (0 = FALSE, 1 = TRUE).

Not: Azure Synapse Analytics returnerar 0alltid .
force_failure_count bigint Antal gånger som det har misslyckats att tvinga den här planen. Den kan bara ökas när frågan kompileras om (inte vid varje körning). Återställs till 0 varje gång is_forced_plan ändras från FALSE till TRUE.

Not: Azure Synapse Analytics returnerar 0alltid .
last_force_failure_reason int Orsak till varför planen misslyckades.

0: inget fel, annars felnummer för det fel som orsakade att tvinga att misslyckas
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
<annat värde>: GENERAL_FAILURE

Not: Azure Synapse Analytics returnerar 0alltid .
last_force_failure_reason_desc nvarchar(128) Textbeskrivning av last_force_failure_reason.

COMPILATION_ABORTED_BY_CLIENT: klienten avbröt frågekompilering innan den slutfördes
ONLINE_INDEX_BUILD: frågan försöker ändra data medan måltabellen har ett index som skapas online
OPTIMIZATION_REPLAY_FAILED: Det gick inte att köra optimeringsreprisskriptet.
INVALID_STARJOIN: planen innehåller ogiltig StarJoin-specifikation
TIME_OUT: Optimeraren överskred antalet tillåtna åtgärder vid sökning efter plan som angetts av tvingad plan
NO_DB: En databas som anges i planen finns inte
HINT_CONFLICT: Det går inte att kompilera frågan eftersom planen står i konflikt med ett frågetips
DQ_NO_FORCING_SUPPORTED: Det går inte att köra frågan eftersom planen står i konflikt med användningen av distribuerade frågor eller fulltextåtgärder.
NO_PLAN: Frågeprocessorn kunde inte skapa en frågeplan eftersom det inte gick att verifiera den framtvingade planen som giltig för frågan
NO_INDEX: Indexet som anges i planen finns inte längre
VIEW_COMPILE_FAILED: Det gick inte att tvinga fram en frågeplan på grund av ett problem i en indexerad vy som refereras till i planen
GENERAL_FAILURE: allmänt framtvingande fel (omfattas inte av andra orsaker)

Not: Azure Synapse Analytics returnerar NONEalltid .
count_compiles bigint Planera kompileringsstatistik.
initial_compile_start_time datetimeoffset Planera kompileringsstatistik.
last_compile_start_time datetimeoffset Planera kompileringsstatistik.
last_execution_time datetimeoffset Senaste körningstid avser den sista sluttiden för frågan/planen.
avg_compile_duration float Planera kompileringsstatistik i mikrosekunder. Dividera med 1 000 000 för att få sekunder.
last_compile_duration bigint Planera kompileringsstatistik i mikrosekunder. Dividera med 1 000 000 för att få sekunder.
plan_forcing_type int Gäller för: SQL Server 2017 (14.x) och senare versioner

Planera tvingad typ.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Gäller för: SQL Server 2017 (14.x) och senare versioner

Textbeskrivning av plan_forcing_type.

NONE: Ingen plan tvingar
MANUAL: Planera framtvingad av användare
AUTO: Planera framtvingad av automatisk justering.
has_compile_replay_script bit Gäller för: SQL Server 2022 (16.x) och senare versioner

Anger om planen har ett optimeringsreprisskript associerat med det:
0 = Inget optimeringsreprisskript (inget eller till och med ogiltigt).
1 = optimeringsreprisskriptet har registrerats.

Gäller inte för Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Gäller för: SQL Server 2022 (16.x) och senare versioner

Anger om optimerad plan framtvingning har inaktiverats för planen:
0 = inaktiverad.
1 = inte inaktiverad.

Gäller inte för Azure Synapse Analytics.
plan_type int Gäller för: SQL Server 2022 (16.x) och senare versioner

Plantyp.
0: Kompilerad plan
1: Dispatcher Plan
2: Frågevariantplan

Gäller inte för Azure Synapse Analytics.
plan_type_desc nvarchar(120) Gäller för: SQL Server 2022 (16.x) och senare versioner

Textbeskrivning av plantypen.
Kompilerad plan: Anger att planen är en icke-parameterkänslig planoptimerad plan
Dispatcher Plan: Anger att planen är en parameterkänslig plan optimerad dispatcher plan
Frågevariantplan: Anger att planen är en parameterkänslig plan för optimerad frågevariantplan

Gäller inte för Azure Synapse Analytics.

Anmärkningar

Fler än en plan kan tvingas när Query Store för sekundära repliker är aktiverat.

Om du använder kolumner has_compile_replay_scriptis_optimized_plan_forcing_disabledplan_typeplan_type_desci Azure Synapse Analytics resulterar det i ett Invalid Column Name fel eftersom de inte stöds. Se Exempel B för ett exempel på hur du använder sys.query_store_plan i Azure Synapse Analytics.

Planera framtvingande begränsningar

Query Store har en mekanism för att framtvinga Query Optimizer för att använda en viss körningsplan. Det finns dock vissa begränsningar som kan förhindra att en plan tillämpas.

Först, om planen innehåller följande konstruktioner:

  • Infoga massuttryck
  • Referens till en extern tabell
  • Distribuerade frågor eller fulltextåtgärder
  • Användning av elastiska frågor
  • Dynamiska markörer eller tangentuppsättningsmarkörer
  • Ogiltig specifikation för stjärnkoppling

Anmärkning

Azure SQL Database och SQL Server 2019 och senare versioner stöder plan framtvingande för statiska och snabba framåtmarkörer.

För det andra är objekt som planen förlitar sig på inte längre tillgängliga:

  • Databas (om databasen, där planen har sitt ursprung, inte längre finns)
  • Index (inte längre där eller inaktiverad)

Slutligen problem med själva planen:

  • Inte lagligt för fråga
  • Frågeoptimeraren överskred antalet tillåtna åtgärder
  • Felaktigt utformad plan-XML

Permissions

Kräver behörigheten VIEW DATABASE STATE .

Examples

A. Hitta orsaken till att SQL Server inte kunde tvinga fram en plan via QDS

Var uppmärksam på kolumnerna last_force_failure_reason_desc och 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. Fråga för att visa frågeplansresultat i Azure Synapse Analytics

Använd följande exempelfråga för att hitta de 100 senaste körningsplanerna i Query Store i Azure Synapse Analytics.

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;