sys.query_store_plan (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse Analytics

Enthält Informationen zu jedem Ausführungsplan, der einer Abfrage zugeordnet ist.

Spaltenname Datentyp Beschreibung
plan_id bigint Der Primärschlüssel.
query_id bigint Fremdschlüssel. Wird mit sys.query_store_query (Transact-SQL) verknüpft.
plan_group_id bigint ID der Plangruppe. Cursorabfragen erfordern in der Regel mehrere Pläne (füllen und abrufen). Füll- und Abrufpläne, die zusammen kompiliert werden, befinden sich in derselben Gruppe.

0 bedeutet, dass sich der Plan nicht in einer Gruppe befindet.
engine_version nvarchar(32) Version des Moduls, das zum Kompilieren des Plans im Format major.minor.build.revision verwendet wird.
compatibility_level smallint Datenbankkompatibilitäts-Ebene der Datenbank, auf die in der Abfrage verwiesen wird.
query_plan_hash binary(8) MD5-Hash des einzelnen Plans.
Query_plan nvarchar(max) Showplan-XML für den Abfrageplan.
is_online_index_plan bit Der Plan wurde während eines Onlineindexbuilds verwendet.
Hinweis: Azure Synapse Analytics gibt immer Null (0) zurück.
is_trivial_plan bit Der Plan ist ein trivialer Plan (Ausgabe in Stufe 0 des Abfrageoptimierers).
Hinweis: Azure Synapse Analytics gibt immer Null (0) zurück.
is_parallel_plan bit Der Plan ist parallel.
Hinweis: Azure Synapse Analytics gibt immer einen (1) zurück.
is_forced_plan bit Der Plan wird als erzwungen markiert, wenn der Benutzer die gespeicherte Prozedur sys.sp_query_store_force_planausführt. Das Erzwingen des Mechanismus garantiert nicht, dass genau dieser Plan für die Abfrage verwendet wird, auf query_iddie verwiesen wird. Das Erzwingen von Erzwingen bewirkt, dass die Abfrage erneut kompiliert wird und in der Regel genau denselben oder ähnlichen Plan erzeugt, auf den verwiesen wird plan_id. Wenn die Erzwingung des Plans nicht erfolgreich ist, force_failure_count wird inkrementiert und last_force_failure_reason mit dem Fehlergrund aufgefüllt.
Hinweis: Azure Synapse Analytics gibt immer Null (0) zurück.
is_natively_compiled bit Der Plan enthält nativ kompilierte speicheroptimierte Prozeduren. (0 = FALSE, 1 = TRUE).
Hinweis: Azure Synapse Analytics gibt immer Null (0) zurück.
force_failure_count bigint Gibt an, wie oft beim Erzwingen dieses Plans ein Fehler aufgetreten ist. Der Wert kann nur inkrementiert werden, wenn die Abfrage neu kompiliert wird (nicht bei jeder Ausführung). Sie wird bei jeder Änderung is_plan_forced von FALSEauf 0 zurückgesetzt.
Hinweis: Azure Synapse Analytics gibt immer Null (0) zurück.
last_force_failure_reason int Grund, warum beim Erzwingen des Plans ein Fehler auftrat.

0: Kein Fehler, andernfalls Nummer des Fehlers, der das Erzwingen verhindert hat.

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

<anderer Wert>: GENERAL_FAILURE
Hinweis: Azure Synapse Analytics gibt immer Null (0) zurück.
last_force_failure_reason_desc nvarchar(128) Textbeschreibung von last_force_failure_reason.

ONLINE_INDEX_BUILD: Abfrage versucht, Daten zu ändern, während die Zieltabelle über einen online erstellten Index verfügt.

OPTIMIZATION_REPLAY_FAILED: Das Wiedergabeskript für die Optimierung konnte nicht ausgeführt werden.

INVALID_STARJOIN: Plan enthält ungültige StarJoin-Spezifikation.

TIME_OUT: Optimierer überschreitet die Anzahl zulässiger Vorgänge beim Suchen nach dem Plan, der durch den erzwungenen Plan angegeben wurde.

NO_DB: Eine im Plan angegebene Datenbank existiert nicht.

HINT_CONFLICT: Abfrage kann nicht kompiliert werden, weil ein Konflikt zwischen dem Plan und einem Abfragehinweis besteht.

DQ_NO_FORCING_SUPPORTED: Die Abfrage kann nicht ausgeführt werden, weil der Plan in Konflikt mit der Verwendung der verteilten Abfrage oder mit Volltextvorgängen steht.

NO_PLAN: Der Abfrageprozessor konnte den Abfrageplan nicht erzeugen, weil der erzwungene Plan nicht als für die Abfrage gültig verifiziert werden konnte.

NO_INDEX: Im Plan angegebener Index ist nicht mehr vorhanden.

VIEW_COMPILE_FAILED: Der Abfrageplan konnte aufgrund eines Problems in einer indizierten Sicht, auf die im Plan verwiesen wird, nicht erzwungen werden.

GENERAL_FAILURE: allgemeiner Erzwingungsfehler (nicht mit anderen Gründen abgedeckt)
Hinweis: Azure Synapse Analytics gibt immer zurück NONE.
count_compiles bigint Planen der Kompilierungsstatistiken.
initial_compile_start_time datetimeoffset Planen der Kompilierungsstatistiken.
last_compile_start_time datetimeoffset Planen der Kompilierungsstatistiken.
last_execution_time datetimeoffset Die letzte Ausführungszeit bezieht sich auf die letzte Endzeit der Abfrage/des Plans.
avg_compile_duration float Planen von Kompilierungsstatistiken in Mikrosekunden. Dividieren Sie durch 1000000, um Sekunden zu erhalten.
last_compile_duration bigint Planen von Kompilierungsstatistiken in Mikrosekunden. Dividieren Sie durch 1000000, um Sekunden zu erhalten.
plan_forcing_type int Planerzwingungstyp.

0: NONE

1: MANUAL

2: AUTO
plan_forcing_type_desc nvarchar(60) Textbeschreibung von plan_forcing_type.

NONE: Keine Planzwingung

MANUELL: Plan vom Benutzer erzwungen

AUTO: Plan durch automatisches Optimieren erzwungen.
has_compile_replay_script bit Gilt für: SQL Server (ab SQL Server 2022 (16.x))

Gibt an, ob der Plan über ein Optimierungsskript verfügt, das dem Skript zugeordnet ist:

0 = Kein Optimierungswiedergabeskript (keines oder sogar ein ungültiges).

1 = Optimierungswiedergabeskript aufgezeichnet.

Gilt nicht für Azure Synapse Analytics.
is_optimized_plan_forcing_disabled bit Gilt für: SQL Server (ab SQL Server 2022 (16.x))

Gibt an, ob die optimierte Planerzwingung für den Plan deaktiviert wurde:

0 = deaktiviert.

1 = nicht deaktiviert

Gilt nicht für Azure Synapse Analytics.
plan_type INT Gilt für: SQL Server (ab SQL Server 2022 (16.x))

Plantyp.

0: Kompilierter Plan

1: Verteilerplan

2: Abfragevariantenplan

Gilt nicht für Azure Synapse Analytics.
plan_type_desc nvarchar(120) Gilt für: SQL Server (ab SQL Server 2022 (16.x))

Textbeschreibung des Plantyps.

Kompilierter Plan: Gibt an, dass es sich bei dem Plan um einen nicht parametrischen vertraulichen Plan handelt, der für einen optimierten Plan optimiert ist.

Dispatcher Plan: Gibt an, dass der Plan ein parameterbezogener optimierter Verteilerplan ist.

Abfragevariantenplan: Gibt an, dass der Plan ein parameterbezogener, optimierter Abfragevariantenplan ist.

Gilt nicht für Azure Synapse Analytics.

Hinweise

Mehrere Pläne können erzwungen werden, wenn der Abfragespeicher für sekundäre Replikate aktiviert ist.

In Azure Synapse Analytics führt die Verwendung von Spalten has_compile_replay_script, is_optimized_plan_forcing_disabled, zu plan_typeeinem Invalid Column Name Fehler, plan_type_desc da sie nicht unterstützt werden. Ein Beispiel für die Verwendung sys.query_store_plan in Azure Synapse Analytics finden Sie in Beispiel B.

Einschränkungen des Erzwingens von Plänen

Der Abfragedatenspeicher verfügt über eine Mechanismus, der den Abfrageoptimierer dazu zwingen kann, einen bestimmten Ausführungsplan zu verwenden. Es gibt allerdings Einschränkungen, die dazu führen können, dass das Erzwingen eines Plans verhindert wird.

Erstens, wenn der Plan die folgenden Konstruktionen enthält:

  • INSERT BULK-Anweisung
  • einen Verweis auf eine externe Tabelle
  • eine verteilte Abfrage oder Volltextvorgänge
  • globale Abfragen
  • Dynamische oder Keysetcursor
  • eine ungültige Sternverknüpfungsspezifikation

Hinweis

Azure SQL-Datenbank und SQL Server 2019 und höhere Buildversionen unterstützen das Erzwingen von statischen und schnellen Vorwärtscursorn.

Zweitens, wenn Objekte, die der Plan verwendet, nicht mehr zur Verfügung stehen:

  • eine Datenbank (wenn die Datenbank, aus der der Plan kommt, nicht mehr existiert)
  • ein Index (nicht mehr vorhanden oder deaktiviert)

Und drittens, bei Problemen mit dem Plan selbst:

  • Er darf nicht abgefragt werden.
  • Der Abfrageoptimierer hat die Zahl an zulässigen Vorgängen überschritten.
  • Die XML des Plans ist ungültig formuliert.

Berechtigungen

Erfordert die Berechtigung VIEW DATABASE STATE.

Beispiele

A. Ermitteln des Grunds, warum SQL Server einen Plan über QDS nicht erzwingen konnte

Achten Sie auf die last_force_failure_reason_desc und force_failure_count die Spalten:

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
    JOIN sys.query_store_query q ON p.query_id = q.query_id
       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. Abfrage zum Anzeigen von Abfrageplanergebnissen in Azure Synapse Analytics

Verwenden Sie die folgende Beispielabfrage, um die 100 neuesten Ausführungspläne im Abfragespeicher in Azure Synapse Analytics zu finden.

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;

Nächste Schritte

In den folgenden Artikeln erfahren Sie mehr über den Abfragespeicher und verwandte Konzepte: