sys.query_store_plan (Transact-SQL)
Gilt für: SQL Server 2016 (13.x) und höher
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure 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_plan ausführt. Das Erzwingen des Mechanismus garantiert nicht, dass genau dieser Plan für die Abfrage verwendet wird, auf query_id die 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_type
einem 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:
- Überwachen der Leistung mit dem Abfragespeicher
- sys.database_query_store_options (Transact-SQL)
- sys.query_context_settings (Transact-SQL)
- sys.query_store_query (Transact-SQL)
- sys.query_store_query_text (Transact-SQL)
- sys.query_store_runtime_stats (Transact-SQL)
- sys.query_store_wait_stats (Transact-SQL)
- sys.query_store_runtime_stats_interval (Transact-SQL)
- Katalogsichten (Transact-SQL)
- Gespeicherte Prozeduren für den Abfragespeicher (Transact-SQL)