Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2019 (15.x) und höhere Versionen
von Azure SQL Database
Azure SQL Managed Instance
SQL sql database in Microsoft Fabric
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 eindeutig identifiziert, der ausgeführt wurde und dessen Plan sich im Plancache befindet, oder der derzeit ausgeführt wird. plan_handle ist varbinary(64)
plan_handle kann aus den folgenden dynamischen Verwaltungsobjekten abgerufen werden:
- sys.dm_exec_cached_plans
- sys.dm_exec_query_stats
- sys.dm_exec_requests
- sys.dm_exec_procedure_stats
- sys.dm_exec_trigger_stats
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. |
number |
smallint | Gespeicherte Prozedur mit ganzer Zahl. Beispielsweise kann eine Gruppe von Prozeduren für die orders Anwendung benannt orderproc;1werden, orderproc;2usw. 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 NULL-Werte sind in der Spalte nicht zulässig. |
query_plan |
xml | Enthält die letzte bekannte Laufzeit-Showplan-Darstellung des tatsächlichen Abfrageausführungsplans, der mit plan_handle angegeben ist. 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 die Ablaufverfolgungsflagge 2451. Um auf Datenbankebene zu aktivieren, verwenden Sie die LAST_QUERY_PLAN_STATS Option in ALTER DATABASE SCOPED CONFIGURATION.
Diese Systemfunktion arbeitet im Rahmen der leichtgewichtigen Infrastruktur für die Erstellung von Abfrageausführungsstatistiken. Weitere Informationen finden Sie unter Profilerstellungsinfrastruktur für Abfragen.
Der von sys.dm_exec_query_plan_stats ausgegebene Showplan enthält 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 in der Spalte der Rückgabetabelle für query_plan eine Ausgabe von Showplan zurückgegeben, sys.dm_exec_query_plan_stats:
Der Plan befindet sich in sys.dm_exec_cached_plans.
und
Die ausgeführte Abfrage ist komplex oder ressourcenaufwendig.
Unter den folgenden Bedingungen wird in der Spalte der zurückgegebenen Tabelle für eine query_plansys.dm_exec_query_plan_stats Showplan-Ausgabe zurückgegeben:
Der Plan befindet sich in sys.dm_exec_cached_plans.
und
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 zurückgegeben:
Der Abfrageplan, der durch die Verwendung von
plan_handleangegeben wird, wurde aus dem Plancache verdrängt.oder
Der Abfrageplan konnte nicht an erster Stelle zwischengespeichert werden. Weitere Informationen finden Sie unter Zwischenspeicherung und Wiederverwendung von Ausführungsplänen.
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 das Zurückgeben des Abfrageplans, wobei der Fehler 6335 generiert wurde. In SQL Server 2005 (9.x) Service Pack 2 und höheren Versionen gibt die query_plan Spalte zurück NULL.
Berechtigungen
SQL Server 2019 (15.x) und frühere Versionen erfordern VIEW SERVER STATE berechtigungen auf dem Server.
SQL Server 2022 (16.x) und höhere Versionen erfordern VIEW SERVER PERFORMANCE STATE berechtigungen auf dem Server.
Beispiele
A. Sehen Sie sich den letzten bekannten tatsächlichen Abfrageausführungsplan für einen bestimmten zwischengespeicherten Plan an
Das folgende Beispiel fragt sys.dm_exec_cached_plans ab, um den entsprechende Plan zu suchen und die plan_handle aus der Ausgabe zu kopieren.
SELECT * FROM sys.dm_exec_cached_plans;
GO
Um dann den letzten bekannten tatsächlichen Abfrageausführungsplan zu erhalten, verwenden Sie das kopierte plan_handle mit der 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