Delen via


sys.query_store_plan (Transact-SQL)

Van toepassing op: SQL Server 2016 (13.x) en latere versies van Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Bevat informatie over elk uitvoeringsplan dat is gekoppeld aan een query.

Kolomnaam Gegevenstype Description
plan_id bigint Primaire sleutel.
query_id bigint Refererende sleutel. Wordt samengevoegd met sys.query_store_query (Transact-SQL).
plan_group_id bigint Id van de plangroep. Cursorquery's vereisen doorgaans meerdere plannen (vullen en ophalen). Plannen vullen en ophalen die samen zijn gecompileerd, bevinden zich in dezelfde groep.

0 betekent dat het plan zich niet in een groep bevindt.
engine_version nvarchar(32) De versie van de engine die wordt gebruikt voor het compileren van het plan in <major>.<minor>.<build>.<revision> indeling.
compatibility_level smallint Databasecompatibiliteitsniveau van de database waarnaar wordt verwezen in de query.
query_plan_hash binary(8) MD5-hash van het afzonderlijke abonnement.
query_plan nvarchar(max) Showplan XML voor het queryplan.
is_online_index_plan bit Het plan is gebruikt tijdens een online indexbuild.

Notitie: Azure Synapse Analytics retourneert 0altijd.
is_trivial_plan bit Plan is een triviaal plan (uitvoer in fase 0 van queryoptimalisatie).

Notitie: Azure Synapse Analytics retourneert 0altijd.
is_parallel_plan bit Het plan is parallel.

Notitie: Azure Synapse Analytics retourneert 1altijd.
is_forced_plan bit Het plan wordt gemarkeerd als geforceerd wanneer de gebruiker een opgeslagen procedure sys.sp_query_store_force_planuitvoert. Het afdwingingsmechanisme garandeert niet dat dit exacte plan wordt gebruikt voor de query waarnaar query_idwordt verwezen. Plan afdwingen zorgt ervoor dat de query opnieuw wordt gecompileerd en produceert doorgaans precies hetzelfde of een vergelijkbaar plan als het plan waarnaar wordt verwezen.plan_id Als het afdwingen van plannen niet slaagt, force_failure_count wordt dit verhoogd en last_force_failure_reason wordt deze gevuld met de reden van de fout.

Notitie: Azure Synapse Analytics retourneert 0altijd.
is_natively_compiled bit Het plan bevat systeemeigen gecompileerde procedures die zijn geoptimaliseerd voor geheugen. (0 = FALSE, 1 = TRUE).

Notitie: Azure Synapse Analytics retourneert 0altijd.
force_failure_count bigint Aantal keren dat het afdwingen van dit plan is mislukt. Deze kan alleen worden verhoogd wanneer de query opnieuw wordt gecompileerd (niet bij elke uitvoering). Wordt opnieuw ingesteld op 0 elke keer is_forced_plan dat wordt gewijzigd van FALSE in TRUE.

Notitie: Azure Synapse Analytics retourneert 0altijd.
last_force_failure_reason int Reden waarom plan afdwingen is mislukt.

0: geen fout, anders foutnummer van de fout waardoor het afdwingen mislukt
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
<andere waarde>: GENERAL_FAILURE

Notitie: Azure Synapse Analytics retourneert 0altijd.
last_force_failure_reason_desc nvarchar(128) Tekstuele beschrijving van last_force_failure_reason.

COMPILATION_ABORTED_BY_CLIENT: compilatie van afgebroken query's voordat deze is voltooid
ONLINE_INDEX_BUILD: query probeert gegevens te wijzigen terwijl de doeltabel een index heeft die online wordt gebouwd
OPTIMIZATION_REPLAY_FAILED: het script voor het opnieuw afspelen van optimalisatie kan niet worden uitgevoerd.
INVALID_STARJOIN: plan bevat ongeldige StarJoin-specificatie
TIME_OUT: Optimizer heeft het aantal toegestane bewerkingen overschreden tijdens het zoeken naar een plan dat is opgegeven door een geforceerd plan
NO_DB: Er bestaat geen database die is opgegeven in het plan
HINT_CONFLICT: De query kan niet worden gecompileerd omdat het plan conflicteert met een queryhint
DQ_NO_FORCING_SUPPORTED: Kan geen query uitvoeren omdat het plan conflicteert met het gebruik van gedistribueerde querybewerkingen of bewerkingen in volledige tekst.
NO_PLAN: Queryprocessor kan geen queryplan produceren, omdat geforceerd plan niet kan worden geverifieerd als geldig voor de query
NO_INDEX: Index opgegeven in plan bestaat niet meer
VIEW_COMPILE_FAILED: Kan het queryplan niet forceren vanwege een probleem in een geïndexeerde weergave waarnaar wordt verwezen in het plan
GENERAL_FAILURE: algemene forceringsfout (niet behandeld met andere redenen)

Notitie: Azure Synapse Analytics retourneert NONEaltijd.
count_compiles bigint Compilatiestatistieken plannen.
initial_compile_start_time datetimeoffset Compilatiestatistieken plannen.
last_compile_start_time datetimeoffset Compilatiestatistieken plannen.
last_execution_time datetimeoffset De laatste uitvoeringstijd verwijst naar de laatste eindtijd van de query/het plan.
avg_compile_duration float Compilatiestatistieken plannen, in microseconden. Deel door 1.000.000 om seconden te krijgen.
last_compile_duration bigint Compilatiestatistieken plannen, in microseconden. Deel door 1.000.000 om seconden te krijgen.
plan_forcing_type int Van toepassing op: SQL Server 2017 (14.x) en latere versies

Plan het afdwingen van type.

0: NONE
1: MANUAL
2: AUTO
plan_forcing_type_desc nvarchar(60) Van toepassing op: SQL Server 2017 (14.x) en latere versies

Tekstbeschrijving van plan_forcing_type.

NONE: Geen plan afdwingen
MANUAL: Plan geforceerd door gebruiker
AUTO: Plan geforceerd door automatisch afstemmen.
has_compile_replay_script bit Van toepassing op: SQL Server 2022 (16.x) en latere versies

Hiermee wordt aangegeven of aan het plan een optimalisatiescript voor opnieuw afspelen is gekoppeld:
0 = Geen optimalisatieherplayscript (geen of zelfs ongeldig).
1 = optimalisatiescript voor opnieuw afspelen vastgelegd.

Niet van toepassing op Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Van toepassing op: SQL Server 2022 (16.x) en latere versies

Hiermee wordt aangegeven of het afdwingen van geoptimaliseerde plannen is uitgeschakeld voor het plan:
0 = uitgeschakeld.
1 = niet uitgeschakeld.

Niet van toepassing op Azure Synapse Analytics.
plan_type int Van toepassing op: SQL Server 2022 (16.x) en latere versies

Type plan.
0: Gecompileerd plan
1: Dispatcher-abonnement
2: Queryvariant-abonnement

Niet van toepassing op Azure Synapse Analytics.
plan_type_desc nvarchar(120) Van toepassing op: SQL Server 2022 (16.x) en latere versies

Tekstbeschrijving van het type plan.
Gecompileerd plan: geeft aan dat het plan een niet-parametergevoelig plan is dat is geoptimaliseerd
Dispatcher-plan: geeft aan dat het plan een parametergevoelig plan is dat is geoptimaliseerd voor dispatcher
Queryvariantplan: geeft aan dat het plan een parametergevoelig plan is dat is geoptimaliseerd voor queryvariant

Niet van toepassing op Azure Synapse Analytics.

Opmerkingen

Er kan meer dan één plan worden afgedwongen wanneer Query Store voor secundaire replica's is ingeschakeld.

In Azure Synapse Analytics, met behulp van kolommenhas_compile_replay_script, is_optimized_plan_forcing_disabledplan_typeplan_type_descresulteert dit in een Invalid Column Name fout omdat ze niet worden ondersteund. Zie voorbeeld B voor een voorbeeld van het gebruik sys.query_store_plan in Azure Synapse Analytics.

Beperkingen plannen

Query Store heeft een mechanisme om Query Optimizer af te dwingen voor het gebruik van een bepaald uitvoeringsplan. Er zijn echter enkele beperkingen die kunnen voorkomen dat een plan wordt afgedwongen.

Als het plan eerst de volgende constructies bevat:

  • Bulkinstructie invoegen
  • Verwijzing naar een externe tabel
  • Gedistribueerde query of bewerkingen in volledige tekst
  • Gebruik van elastische query's
  • Dynamische cursors of toetssetcursors
  • Ongeldige sterdeelnamespecificatie

Opmerking

Ondersteuningsplan voor azure SQL Database en SQL Server 2019 en latere buildversies voor statische en snelle cursors.

Ten tweede, wanneer objecten waarop het plan is gebaseerd, niet meer beschikbaar zijn:

  • Database (als database, waar het plan vandaan komt, niet meer bestaat)
  • Index (niet meer aanwezig of uitgeschakeld)

Ten slotte zijn er problemen met het plan zelf:

  • Niet legaal voor query
  • Query Optimizer heeft het aantal toegestane bewerkingen overschreden
  • Onjuist gevormde plan-XML

Permissions

Hiervoor is de VIEW DATABASE STATE machtiging vereist.

Voorbeelden

Eén. De reden vinden dat SQL Server geen plan kan afdwingen via QDS

Let op de last_force_failure_reason_desc en force_failure_count kolommen:

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. Query om resultaten van queryplannen weer te geven in Azure Synapse Analytics

Gebruik de volgende voorbeeldquery om de 100 meest recente uitvoeringsplannen te vinden in de Query Store in 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;