Megosztás a következőn keresztül:


sys.query_store_plan (Transact-SQL)

A következőkre vonatkozik: Az SQL Server 2016 (13.x) és újabb verziói Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Database a Microsoft Fabricben

A lekérdezéshez társított végrehajtási tervekkel kapcsolatos információkat tartalmaz.

Oszlop név Adattípus Description
plan_id bigint Elsődleges kulcs.
query_id bigint Idegen kulcs. Csatlakozás a sys.query_store_query (Transact-SQL)-hoz.
plan_group_id bigint A tervcsoport azonosítója. A kurzorlekérdezések általában több (feltöltési és beolvasási) csomagot igényelnek. Az együtt összeállított csomagok feltöltése és beolvasása ugyanabban a csoportban található.

0 azt jelenti, hogy a terv nem egy csoportban van.
engine_version nvarchar(32) A terv <major>.<minor>.<build>.<revision> formátumba fordításához használt motor verziója.
compatibility_level smallint A lekérdezésben hivatkozott adatbázis adatbáziskompatibilitási szintje.
query_plan_hash bináris(8) Az egyes terv MD5 kivonata.
query_plan nvarchar(max) Showplan XML a lekérdezési tervhez.
is_online_index_plan bit A tervet egy online index összeállítása során használták.

Jegyzet: Az Azure Synapse Analytics mindig visszatér 0.
is_trivial_plan bit A terv egy triviális terv (a lekérdezésoptimalizáló 0. szakaszának kimenete).

Jegyzet: Az Azure Synapse Analytics mindig visszatér 0.
is_parallel_plan bit A terv párhuzamos.

Jegyzet: Az Azure Synapse Analytics mindig visszatér 1.
is_forced_plan bit A rendszer kényszerítettként jelöli meg a tervet, amikor a felhasználó végrehajtja a tárolt eljárást sys.sp_query_store_force_plan. Az kényszerítési mechanizmus nem garantálja , hogy ez a pontos terv lesz használva a hivatkozott query_idlekérdezéshez. A terv kényszerítése miatt a lekérdezés újrafordításra kerül, és általában pontosan ugyanazt vagy hasonló tervet hoz létre, mint a hivatkozott plan_idterv. Ha a terv kényszerítése nem sikerül, force_failure_count a rendszer növekszik, és last_force_failure_reason a hiba okával van feltöltve.

Jegyzet: Az Azure Synapse Analytics mindig visszatér 0.
is_natively_compiled bit A terv natívan lefordított, memóriaoptimalizált eljárásokat tartalmaz. (0 = FALSE, 1 = TRUE).

Jegyzet: Az Azure Synapse Analytics mindig visszatér 0.
force_failure_count bigint A terv kényszerítésének hányszor volt sikertelen. Csak akkor növelhető, ha a lekérdezés újrafordítása történik (nem minden végrehajtás során). A rendszer minden alkalommal 0 alaphelyzetbe állítja is_forced_plan a FALSE beállításokatTRUE.

Jegyzet: Az Azure Synapse Analytics mindig visszatér 0.
last_force_failure_reason int A terv kényszerítésének oka.

0: nincs hiba, ellenkező esetben a hiba száma, amely miatt a kényszerítés meghiúsult
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
<egyéb érték>: GENERAL_FAILURE

Jegyzet: Az Azure Synapse Analytics mindig visszatér 0.
last_force_failure_reason_desc nvarchar(128) A parancs szöveges leírása last_force_failure_reason.

COMPILATION_ABORTED_BY_CLIENT: az ügyfél megszakította a lekérdezés fordítását, mielőtt befejeződött volna
ONLINE_INDEX_BUILD: a lekérdezés megpróbálja módosítani az adatokat, miközben a céltábla indexe online készült
OPTIMIZATION_REPLAY_FAILED: Az optimalizálási visszajátszási szkript végrehajtása nem sikerült.
INVALID_STARJOIN: a terv érvénytelen StarJoin-specifikációt tartalmaz
TIME_OUT: Az optimalizáló túllépte az engedélyezett műveletek számát a kényszerített terv által megadott terv keresésekor
NO_DB: A tervben megadott adatbázis nem létezik
HINT_CONFLICT: A lekérdezés nem fordítható le, mert a terv ütközik egy lekérdezési tipptel
DQ_NO_FORCING_SUPPORTED: Nem lehet lekérdezést végrehajtani, mert a terv ütközik az elosztott lekérdezés vagy a teljes szöveges műveletek használatával.
NO_PLAN: A lekérdezésfeldolgozó nem tudott lekérdezési tervet létrehozni, mert a kényszerített terv nem ellenőrizhető érvényesként a lekérdezéshez
NO_INDEX: A tervben megadott index már nem létezik
VIEW_COMPILE_FAILED: A tervben hivatkozott indexelt nézetben észlelt probléma miatt nem sikerült kikényszeríteni a lekérdezéstervet
GENERAL_FAILURE: általános kényszerítési hiba (más okokkal nem foglalkozik)

Jegyzet: Az Azure Synapse Analytics mindig visszatér NONE.
count_compiles bigint Összeállítási statisztikák tervezése.
initial_compile_start_time datetimeoffset Összeállítási statisztikák tervezése.
last_compile_start_time datetimeoffset Összeállítási statisztikák tervezése.
last_execution_time datetimeoffset A legutóbbi végrehajtási idő a lekérdezés/terv utolsó befejezési időpontjára vonatkozik.
avg_compile_duration float Fordítási statisztikák tervezése mikroszekundumokban. Oszd el 1 000 000-sel a másodpercekért.
last_compile_duration bigint Fordítási statisztikák tervezése mikroszekundumokban. Oszd el 1 000 000-sel a másodpercekért.
plan_forcing_type int A következőkre vonatkozik: SQL Server 2017 (14.x) és újabb verziók

Terv típusú kényszerítés.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) A következőkre vonatkozik: SQL Server 2017 (14.x) és újabb verziók

A szöveg leírása plan_forcing_type.

NONE: Nincs terv kényszerítése
MANUAL: Felhasználó által kényszerített terv
AUTO: Automatikus hangolással kényszerített terv.
has_compile_replay_script bit A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók

Azt jelzi, hogy a terv rendelkezik-e optimalizálási visszajátszási szkripttel:
0 = Nincs optimalizálási visszajátszási szkript (nincs vagy érvénytelen).
1 = optimalizálási visszajátszási szkript rögzítve.

Nem alkalmazható az Azure Synapse Analyticsre.
is_optimized_plan_forcing_disabled bit A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók

Azt jelzi, hogy az optimalizált terv kényszerítése le lett-e tiltva a tervhez:
0 = le van tiltva.
1 = nincs letiltva.

Nem alkalmazható az Azure Synapse Analyticsre.
plan_type int A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók

Terv típusa.
0: Összeállított terv
1: Diszpécser terv
2: Lekérdezésvariáns-terv

Nem alkalmazható az Azure Synapse Analyticsre.
plan_type_desc nvarchar(120) A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók

A tervtípus szöveges leírása.
Lefordított terv: Azt jelzi, hogy a terv nem paraméterérzékeny, optimalizált terv
Diszpécsercsomag: Azt jelzi, hogy a terv egy paraméterérzékeny, optimalizált diszpécsercsomag
Lekérdezésvariáns-terv: Azt jelzi, hogy a terv egy paraméterérzékeny, optimalizált lekérdezésvariáns terv

Nem alkalmazható az Azure Synapse Analyticsre.

Megjegyzések

Egynél több csomag kényszeríthető, ha a másodlagos replikák lekérdezéstára engedélyezve van.

Az Azure Synapse Analyticsben az oszlopok has_compile_replay_scriptis_optimized_plan_forcing_disabledplan_typehasználata hibát eredményezplan_type_desc, Invalid Column Name mivel azok nem támogatottak. Az Azure Synapse Analyticsben való használatra példa a sys.query_store_plan található.

Korlátozások megtervezése

A Lekérdezéstár olyan mechanizmussal rendelkezik, amely kényszeríti a Lekérdezésoptimalizálót bizonyos végrehajtási terv használatára. Vannak azonban bizonyos korlátozások, amelyek megakadályozhatják a terv kikényszerítését.

Először is, ha a terv a következő szerkezeteket tartalmazza:

  • Tömeges utasítás beszúrása
  • Hivatkozás külső táblára
  • Elosztott lekérdezési vagy teljes szöveges műveletek
  • Rugalmas lekérdezések használata
  • Dinamikus vagy billentyűkészlet-kurzorok
  • Érvénytelen csillagillesztési specifikáció

Megjegyzés:

Az Azure SQL Database és az SQL Server 2019 és újabb buildverziói támogatják a statikus és gyors kurzorokra való kényszerítést.

Másodszor, ha a terv alapjául szolgáló objektumok már nem érhetők el:

  • Adatbázis (ha az adatbázis, ahonnan a terv származik, már nem létezik)
  • Index (már nincs ott vagy le van tiltva)

Végül a tervvel kapcsolatos problémák:

  • Nem legális a lekérdezés
  • A Lekérdezésoptimalizáló túllépte az engedélyezett műveletek számát
  • Helytelenül formázott terv XML-fájlja

Permissions

VIEW DATABASE STATE Engedélyre van szükség.

Példák

A. Annak megkeresése, hogy az SQL Server miért nem tudta kikényszeríteni a tervet a QDS-en keresztül

Figyeljen az oszlopokra és last_force_failure_reason_desc az oszlopokraforce_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. Lekérdezés a lekérdezésterv eredményeinek megtekintéséhez az Azure Synapse Analyticsben

Az alábbi minta lekérdezéssel megtalálhatja a 100 legutóbbi végrehajtási tervet az Azure Synapse Analytics lekérdezéstárában.

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;