sys.dm_exec_query_plan_stats (Transact-SQL)
Gilt für: SQL Server 2019 (15.x) Azure SQL-DatenbankAzure SQL Managed Instance
Gibt das Äquivalent des letzten bekannten tatsächlichen Ausführungsplans für einen zuvor zwischengespeicherten Abfrageplan zurück.
Syntax
sys.dm_exec_query_plan_stats ( plan_handle )
Argumente
plan_handle
Ein Token, das einen Abfrageausführungsplan für einen Batch identifiziert, der ausgeführt wurde und sich sein Plan im Plancache befindet oder derzeit ausgeführt wird. plan_handle ist varbinary(64)
plan_handle kann aus den folgenden dynamischen Verwaltungsobjekten abgerufen werden:
- sys.dm_exec_cached_plans (Transact-SQL)
- sys.dm_exec_query_stats (Transact-SQL)
- sys.dm_exec_requests (Transact-SQL)
- sys.dm_exec_procedure_stats (Transact-SQL)
- sys.dm_exec_trigger_stats (Transact-SQL)
Zurückgegebene Tabelle
Spaltenname | Datentyp | Beschreibung |
---|---|---|
dbid | smallint | ID der Kontextdatenbank, die gültig war, als die diesem Plan entsprechende Transact-SQL-Anweisung kompiliert wurde. Für Ad-hoc-Anweisungen und vorbereitete SQL-Anweisungen, die ID der Datenbank, in der die Anweisungen kompiliert wurden. Die Spalte lässt NULL-Werte zu. |
objectid | int | ID des Objekts (z. B. gespeicherte Prozedur oder benutzerdefinierte Funktion) für diesen Abfrageplan. Für Ad-hoc- und vorbereitete Batches entspricht diese Spalte dem Wert NULL. Die Spalte lässt NULL-Werte zu. |
Nummer | smallint | Gespeicherte Prozedur mit ganzer Zahl. Eine Gruppe von Prozeduren für die orders -Anwendung kann z. B. die Namen orderproc;1, orderproc;2usw. haben. Für Ad-hoc- und vorbereitete Batches entspricht diese Spalte dem Wert NULL. Die Spalte lässt NULL-Werte zu. |
encrypted | bit | Zeigt an, ob die entsprechende Prozedur verschlüsselt ist. 0 = nicht verschlüsselt 1 = verschlüsselt Spalte kann nicht null sein. |
Query_plan | xml | Enthält die letzte bekannte Laufzeit-Showplan-Darstellung des tatsächlichen Abfrageausführungsplans, der mit plan_handle angegeben wird. Der Showplan liegt im XML-Format vor. Für jeden Batch, der z. B. Ad-hoc-Transact-SQL-Anweisungen, Aufrufe von gespeicherten Prozeduren sowie benutzerdefinierte Funktionsaufrufe enthält, wird jeweils ein Plan generiert. Die Spalte lässt NULL-Werte zu. |
Hinweise
Dies ist ein Opt-in-Feature. Verwenden Sie zum Aktivieren auf Serverebene das Ablaufverfolgungskennzeichnung 2451. Verwenden Sie zum Aktivieren auf Datenbankebene die Option LAST_QUERY_PLAN_STATS in ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL).
Diese Systemfunktion funktioniert unter der einfachen Profilerstellungsinfrastruktur für die Abfrageausführung. Weitere Informationen finden Sie unter Profilerstellungsinfrastruktur für Abfragen.
Die Showplan-Ausgabe enthält sys.dm_exec_query_plan_stats
die folgenden Informationen:
- Alle Kompilierungszeitinformationen, die im zwischengespeicherten Plan gefunden wurden
- Laufzeitinformationen, z. B. die tatsächliche Anzahl von Zeilen pro Operator, die gesamte CPU-Zeit und die Ausführungszeit der Abfrage, Überlaufwarnungen, tatsächliche DOP, maximal genutzter Arbeitsspeicher und gewährtem Arbeitsspeicher
Unter den folgenden Bedingungen wird eine Showplan-Ausgabe , die einem tatsächlichen Ausführungsplan entspricht, in der query_plan
Spalte der zurückgegebenen Tabelle für sys.dm_exec_query_plan_stats
Folgendes zurückgegeben:
Der Plan befindet sich in sys.dm_exec_cached_plans.
AND
Die ausgeführte Abfrage ist komplex oder ressourcenaufwendig.
Unter den folgenden Bedingungen wird eine vereinfachte1 Showplan-Ausgabe in der query_plan
Spalte der zurückgegebenen Tabelle für sys.dm_exec_query_plan_stats
:
Der Plan befindet sich in sys.dm_exec_cached_plans.
AND
Die Abfrage ist einfach genug, in der Regel als Teil einer OLTP-Workload kategorisiert.
1 Bezieht sich auf einen Showplan, der nur den Stammknotenoperator (SELECT) enthält.
Unter den folgenden Bedingungen wird keine Ausgabe von sys.dm_exec_query_plan_stats
:
Der mithilfe der Verwendung
plan_handle
angegebene Abfrageplan wurde aus dem Plancache entfernt.OR
Der Abfrageplan konnte nicht an erster Stelle zwischengespeichert werden. Weitere Informationen finden Sie unter Zwischenspeichern und Wiederverwenden von Ausführungsplanen.
Hinweis
Eine Einschränkung der Anzahl der im XML-Datentyp zulässigen geschachtelten Ebenen bedeutet, dass sys.dm_exec_query_plan
keine Abfragepläne zurückgegeben werden können, die 128 Ebenen geschachtelter Elemente erfüllen oder überschreiten. In früheren Versionen von SQL Server verhinderte diese Bedingung, dass der Abfrageplan zurückgegeben wird und Fehler 6335 generiert. In SQL Server 2005 (9.x) Service Pack 2 und höheren Versionen gibt die query_plan
Spalte NULL zurück.
Berechtigungen
Erfordert die VIEW SERVER STATE
-Berechtigung auf dem Server.
Berechtigungen für SQL Server 2022 und höher
Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.
Beispiele
A. Sehen Sie sich den letzten bekannten tatsächlichen Abfrageausführungsplan für einen bestimmten zwischengespeicherten Plan an.
Im folgenden Beispiel werden Abfragen zum sys.dm_exec_cached_plans
Suchen des interessanten Plans und zum Kopieren des zugehörigen plan_handle
Plans aus der Ausgabe ausgeführt.
SELECT * FROM sys.dm_exec_cached_plans;
GO
Verwenden Sie dann zum Abrufen des letzten bekannten tatsächlichen Abfrageausführungsplans die kopierte plan_handle
Systemfunktion sys.dm_exec_query_plan_stats
.
SELECT * FROM sys.dm_exec_query_plan_stats(< copied plan_handle >);
GO
B. Sehen Sie sich den letzten bekannten tatsächlichen Abfrageausführungsplan für alle zwischengespeicherten Pläne an.
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps;
GO
C. Sehen Sie sich den letzten bekannten tatsächlichen Abfrageausführungsplan für einen bestimmten zwischengespeicherten Plan und Abfragetext an.
SELECT *
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle) AS qps
WHERE st.text LIKE 'SELECT * FROM Person.Person%';
GO
D. Sehen Sie sich zwischengespeicherte Ereignisse für trigger an
SELECT *
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_query_plan_stats(plan_handle)
WHERE objtype ='Trigger';
GO
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für