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 der Plan nicht in einer Gruppe enthalten ist. |
engine_version |
nvarchar(32) | Version des Moduls, das zum Kompilieren des Plans im <major>.<minor>.<build>.<revision> Format 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 zurück 0 . |
is_trivial_plan |
bit | Der Plan ist ein trivialer Plan (Ausgabe in Stufe 0 des Abfrageoptimierers). Hinweis: Azure Synapse Analytics gibt immer zurück 0 . |
is_parallel_plan |
bit | Der Plan ist parallel. Hinweis: Azure Synapse Analytics gibt immer zurück 1 . |
is_forced_plan |
bit | Der Plan wird als erzwungen markiert, wenn der Benutzer die gespeicherte Prozedur sys.sp_query_store_force_plan ausführt. Der Erzwingungsmechanismus garantiert nicht, dass dieser genaue Plan für die Abfrage verwendet wird, auf query_id die verwiesen wird. Das Erzwingen von Erzwingen führt dazu, dass die Abfrage erneut kompiliert wird, und in der Regel wird genau derselbe oder ein ähnlicher Plan für den Plan erzeugt, auf den verwiesen wird plan_id . Wenn das Erzwingen 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 zurück 0 . |
is_natively_compiled |
bit | Der Plan enthält nativ kompilierte speicheroptimierte Prozeduren. (0 = FALSE , 1 = TRUE ).Hinweis: Azure Synapse Analytics gibt immer zurück 0 . |
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). Setzt auf 0 jedes Mal zurück, wenn is_plan_forced von FALSE zu TRUE .Hinweis: Azure Synapse Analytics gibt immer zurück 0 . |
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. 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 <anderer Wert>: GENERAL_FAILURE Hinweis: Azure Synapse Analytics gibt immer zurück 0 . |
last_force_failure_reason_desc |
nvarchar(128) | Textbeschreibung von last_force_failure_reason .COMPILATION_ABORTED_BY_CLIENT : Clientabbruch der Abfragekompilierung vor AbschlussONLINE_INDEX_BUILD : Abfrage versucht, Daten zu ändern, während die Zieltabelle über einen Index verfügt, der online erstellt wirdOPTIMIZATION_REPLAY_FAILED : Fehler beim Ausführen des Skripts für die Replay-Wiedergabe der Optimierung.INVALID_STARJOIN : Plan enthält ungültige StarJoin-SpezifikationTIME_OUT : Optimierer hat die Anzahl der zulässigen Vorgänge überschritten, während sie nach einem Plan suchen, der durch erzwungenen Plan angegeben wurde.NO_DB : Eine im Plan angegebene Datenbank ist nicht vorhanden.HINT_CONFLICT : Abfrage kann nicht kompiliert werden, da der Plan mit einem Abfragehinweis in Konflikt liegt.DQ_NO_FORCING_SUPPORTED : Abfrage kann nicht ausgeführt werden, da der Plan mit der Verwendung von verteilten Abfrage- oder Volltextvorgängen in Konflikt stand.NO_PLAN : Der Abfrageprozessor konnte keinen Abfrageplan erstellen, da der erzwungene Plan nicht als gültig für die Abfrage überprüft werden konnte.NO_INDEX : Index, der im Plan angegeben ist, ist nicht mehr vorhandenVIEW_COMPILE_FAILED : Der Abfrageplan konnte aufgrund eines Problems in einer indizierten Ansicht, 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 1.000.000 Sekunden, um Sekunden zu erhalten. |
last_compile_duration |
bigint | Planen von Kompilierungsstatistiken in Mikrosekunden. Dividieren Sie durch 1.000.000 Sekunden, um Sekunden zu erhalten. |
plan_forcing_type |
int | Gilt für: SQL Server 2017 (14.x) und höhere Versionen Planerzwingungstyp. 0: NONE 1: MANUAL 2: AUTO |
plan_forcing_type_desc |
nvarchar(60) | Gilt für: SQL Server 2017 (14.x) und höhere Versionen Textbeschreibung von plan_forcing_type .NONE : Kein Plan erzwingenMANUAL : Planen, der vom Benutzer erzwungen wirdAUTO : Planen Sie durch automatische Optimierung erzwungen. |
has_compile_replay_script |
bit | Gilt für: SQL Server 2022 (16.x) und höhere Versionen 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 2022 (16.x) und höhere Versionen 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 2022 (16.x) und höhere Versionen 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 2022 (16.x) und höhere Versionen 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 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
, plan_type
, zu 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 unter 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:
- Massen-Anweisung einfügen
- einen Verweis auf eine externe Tabelle
- eine verteilte Abfrage oder Volltextvorgänge
- Verwendung von elastischen Abfragen
- Dynamische oder Keysetcursor
- eine ungültige Sternverknüpfungsspezifikation
Hinweis
Azure SQL-Datenbank und SQL Server 2019 und neueren Buildversionen unterstützen das Erzwingen von statischen und schnellen Vorwärtscursorn.
Zweitens, wenn Objekte, die der Plan verwendet, nicht mehr zur Verfügung stehen:
- Datenbank (wenn datenbank, wo der Plan stammt, ist nicht mehr vorhanden)
- 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 VIEW DATABASE STATE
-Berechtigung.
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
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. 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;
Zugehöriger Inhalt
- Überwachen der Leistung mithilfe des Abfragespeichers
- 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)
- Systemkatalogansichten (Transact-SQL)
- Gespeicherte Prozeduren für den Abfragespeicher (Transact-SQL)