Sdílet prostřednictvím


sys.query_store_plan (Transact-SQL)

Platí na: SQL Server 2016 (13.x) a nowše verzie Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database in Microsoft Fabric

Obsahuje informace o každém plánu provádění přidruženém k dotazu.

Název sloupce Datový typ Description
plan_id bigint Primární klíč.
query_id bigint Cizí klíč. Spojí se s sys.query_store_query (Transact-SQL).
plan_group_id bigint ID skupiny plánů. Dotazy kurzoru obvykle vyžadují více (naplnit a načíst) plány. Naplňte a načtěte plány, které jsou kompilovány společně, jsou ve stejné skupině.

0 znamená, že plán není ve skupině.
engine_version nvarchar(32) Verze modulu použitého ke kompilaci plánu ve <major>.<minor>.<build>.<revision> formátu.
compatibility_level smallint Úroveň kompatibility databáze odkazované v dotazu.
query_plan_hash binární(8) Hodnota hash MD5 individuálního plánu
query_plan nvarchar(max) Showplan XML pro plán dotazu.
is_online_index_plan bit Plán byl použit během online sestavení indexu.

Poznámka: Azure Synapse Analytics vždy vrací 0.
is_trivial_plan bit Plán je triviální plán (výstup ve fázi 0 optimalizátoru dotazů).

Poznámka: Azure Synapse Analytics vždy vrací 0.
is_parallel_plan bit Plán je paralelní.

Poznámka: Azure Synapse Analytics vždy vrací 1.
is_forced_plan bit Plán je označen jako vynucený, když uživatel spustí uloženou proceduru sys.sp_query_store_force_plan. Mechanismus vynucení nezaručuje , že se tento přesný plán použije pro dotaz, na který query_idodkazuje . Vynucení plánu způsobí opětovné kompilaci dotazu a obvykle vytvoří přesně stejný nebo podobný plán plánu, na který plan_idodkazuje . Pokud plánování nebude úspěšné, force_failure_count zvýší se a last_force_failure_reason naplní se důvodem selhání.

Poznámka: Azure Synapse Analytics vždy vrací 0.
is_natively_compiled bit Plán zahrnuje nativně kompilované procedury optimalizované pro paměť. (0 = FALSE, 1 = TRUE).

Poznámka: Azure Synapse Analytics vždy vrací 0.
force_failure_count bigint Počet selhání vynucení tohoto plánu Může se zvýšit pouze v případech, kdy je dotaz rekompilován (ne při každém spuštění). Obnoví se pokaždé 0 , když is_forced_plan se změní z FALSE na TRUE.

Poznámka: Azure Synapse Analytics vždy vrací 0.
last_force_failure_reason int Důvod, proč plánování vynucování selhalo

0: žádné selhání, jinak číslo chyby, která způsobila selhání vynucení
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
<jiná hodnota>: GENERAL_FAILURE

Poznámka: Azure Synapse Analytics vždy vrací 0.
last_force_failure_reason_desc nvarchar(128) Textový popis .last_force_failure_reason

COMPILATION_ABORTED_BY_CLIENT: Kompilace dotazu přerušena klientem před dokončením
ONLINE_INDEX_BUILD: Dotaz se pokusí upravit data, zatímco cílová tabulka má index, který se sestavuje online.
OPTIMIZATION_REPLAY_FAILED: Skript pro přehrání optimalizace se nepodařilo spustit.
INVALID_STARJOIN: Plán obsahuje neplatnou specifikaci StarJoin
TIME_OUT: Optimalizátor překročil počet povolených operací při hledání plánu určeného vynuceným plánem.
NO_DB: Databáze zadaná v plánu neexistuje.
HINT_CONFLICT: Dotaz nejde zkompilovat, protože plán je v konfliktu s nápovědou dotazu.
DQ_NO_FORCING_SUPPORTED: Dotaz nejde spustit, protože plán je v konfliktu s použitím distribuovaných dotazů nebo fulltextových operací.
NO_PLAN: Procesor dotazů nemohl vytvořit plán dotazu, protože vynucený plán nelze ověřit jako platný pro dotaz.
NO_INDEX: Index zadaný v plánu již neexistuje.
VIEW_COMPILE_FAILED: Plán dotazu se nepovedlo vynutit kvůli problému v indexovaném zobrazení odkazovaném v plánu.
GENERAL_FAILURE: Obecná chyba vynucení (nezabíraná jinými důvody)

Poznámka: Azure Synapse Analytics vždy vrací NONE.
count_compiles bigint Plánování statistik kompilace
initial_compile_start_time datetimeoffset Plánování statistik kompilace
last_compile_start_time datetimeoffset Plánování statistik kompilace
last_execution_time datetimeoffset Čas posledního spuštění odkazuje na poslední koncový čas dotazu nebo plánu.
avg_compile_duration float Plánování statistik kompilace v mikrosekundách Vydělte 1 000 000 sekund.
last_compile_duration bigint Plánování statistik kompilace v mikrosekundách Vydělte 1 000 000 sekund.
plan_forcing_type int Platí pro: SQL Server 2017 (14.x) a novější verze

Typ vynucení plánování

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Platí pro: SQL Server 2017 (14.x) a novější verze

Textový popis .plan_forcing_type

NONE: Žádné vynucení plánu
MANUAL: Plánování vynucené uživatelem
AUTO: Plánování vynucené automatickým laděním.
has_compile_replay_script bit Platí pro: SQL Server 2022 (16.x) a novější verze

Určuje, jestli má plán přidružený skript pro přehrání optimalizace:
0 = Žádný skript pro přehrání optimalizace (žádný nebo dokonce neplatný).
1 = zaznamenaný skript pro přehrání optimalizace

Nevztahuje se na Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Platí pro: SQL Server 2022 (16.x) a novější verze

Určuje, jestli byl optimalizovaný plán vynucení pro plán zakázaný:
0 = zakázáno.
1 = není zakázáno.

Nevztahuje se na Azure Synapse Analytics.
plan_type int Platí pro: SQL Server 2022 (16.x) a novější verze

Typ plánu
0: Kompilovaný plán
1: Plán dispečera
2: Plán variant dotazu

Nevztahuje se na Azure Synapse Analytics.
plan_type_desc nvarchar(120) Platí pro: SQL Server 2022 (16.x) a novější verze

Textový popis typu plánu.
Zkompilovaný plán: Označuje, že plán je neparametrový plán optimalizovaný pro jiný než parametr.
Plán dispečeru: Označuje, že plán je plán optimalizovaný pro plán optimalizovaný pro parametr.
Plán variant dotazu: Označuje, že plán je plán optimalizovaný pro variantu dotazu optimalizovaný pro parametry.

Nevztahuje se na Azure Synapse Analytics.

Poznámky

Pokud je povolené úložiště dotazů pro sekundární repliky , může být vynuceno více než jeden plán.

Ve službě Azure Synapse Analytics při použití sloupců has_compile_replay_scriptis_optimized_plan_forcing_disabled, plan_typeplan_type_descdojde k Invalid Column Name chybě, protože nejsou podporované. Příklad použití ve službě Azure Synapse Analytics najdete v příkladusys.query_store_plan B.

Omezení vynucení plánování

Úložiště dotazů má mechanismus pro vynucení optimalizátoru dotazů pro použití určitého plánu provádění. Existují však určitá omezení, která mohou zabránit vynucení plánu.

Za prvé, pokud plán obsahuje následující konstrukce:

  • Vložit hromadný příkaz
  • Odkaz na externí tabulku
  • Distribuované operace dotazů nebo fulltextových operací
  • Použití elastických dotazů
  • Dynamické kurzory nebo kurzory sady kláves
  • Neplatná specifikace spojení hvězd

Poznámka:

Azure SQL Database a SQL Server 2019 a novější verze sestavení podporují plán vynucení statických a rychlých kurzorů vpřed.

Za druhé, pokud objekty, na které se plán spoléhá, už nejsou k dispozici:

  • Databáze (pokud databáze, kde plán pochází, už neexistuje)
  • Index (už tam nebo není zakázaný)

A konečně problémy se samotným plánem:

  • Není pro dotaz z právních důvodů
  • Optimalizátor dotazů překročil počet povolených operací
  • Nesprávně vytvořený plán XML

Povolení

VIEW DATABASE STATE Vyžaduje oprávnění.

Examples

A. Zjištění důvodu, proč SQL Server nemohl vynutit plán přes QDS

Věnujte pozornost sloupcůmlast_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. Dotaz na zobrazení výsledků plánu dotazů ve službě Azure Synapse Analytics

Pomocí následujícího ukázkového dotazu vyhledejte 100 nejnovějších plánů provádění v úložišti dotazů ve službě 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;