Freigeben über


sys.dm_exec_query_statistics_xml (Transact-SQL)

Gilt für: SQL Server 2016 (13.x) und spätere Versionen Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Gibt den Abfrageausführungsplan für In-Flight-Anforderungen zurück. Verwenden Sie diesen DMV, um Showplan-XML mit vorübergehenden Statistiken abzurufen.

Syntax

sys.dm_exec_query_statistics_xml(session_id)

Argumente

session_id

Die Sitzungs-ID des Batches, die gesucht wird. session_id ist smallint. session_id kann aus den folgenden dynamischen Verwaltungsobjekten abgerufen werden:

Zurückgegebene Tabelle

Spaltenname Datentyp BESCHREIBUNG
session_id smallint ID der Sitzung. Lässt keine NULL-Werte zu.
request_id int ID der Anforderung. Lässt keine NULL-Werte zu.
sql_handle varbinary(64) Ein Token, das den Batch oder die gespeicherte Prozedur eindeutig identifiziert, zu der die Abfrage gehört. NULL-Werte sind zulässig.
plan_handle varbinary(64) Ein Token, das einen Abfrageausführungsplan für einen derzeit ausgeführten Batch eindeutig identifiziert. NULL-Werte sind zulässig.
query_plan xml Enthält die Laufzeit-Showplan-Darstellung des Abfrageausführungsplans, die mit plan_handle und enthaltenen Teilstatistiken 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. NULL-Werte sind zulässig.

Einschränkungen

Aufgrund einer möglichen Verletzung des zufälligen Zugriffs (AV) beim Ausführen einer gespeicherten Überwachungsprozedur mit dem sys.dm_exec_query_statistics_xml DMV wurde der Showplan XML-Attributwert <ParameterList>ParameterRuntimeValue in SQL Server 2017 (14.x) CU 26 und SQL Server 2019 (15.x) CU 12 entfernt. Dieser Wert kann bei der Problembehandlung bei lang ausgeführten gespeicherten Prozeduren hilfreich sein. Sie können diesen Wert in SQL Server 2017 (14.x) CU 31, SQL Server 2019 (15.x) CU 19 und höheren Versionen mit Trace-Flag 2446 erneut aktivieren. Dieses Ablaufverfolgungsflag ermöglicht die Sammlung des Laufzeitparameterwerts auf Kosten eines zusätzlichen Aufwands.

Vorsicht

Trace-Flag 2446 soll nicht kontinuierlich in einer Produktionsumgebung aktiviert werden, sondern nur für zeitlich begrenzte Fehlerbehebung. Die Verwendung dieses Trace-Flags kann zu einer erhöhten CPU- und Arbeitsspeichernutzung führen, da ein Showplan-XML-Fragment mit Laufzeitparameterinformationen erstellt wird, unabhängig davon, ob der sys.dm_exec_query_statistics_xml DMV aufgerufen wird oder nicht.

In SQL Server 2022 (16.x), Azure SQL-Datenbank und azure SQL Managed Instance können Sie dieselbe Funktionalität auf Datenbankebene mithilfe der FORCE_SHOWPLAN_RUNTIME_PARAMETER_COLLECTION Option in ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL) ausführen.

Hinweise

Diese Systemfunktion ist ab SQL Server 2016 (13.x) mit Service Pack 1 verfügbar. Weitere Informationen finden Sie unter KB 3190871.

Diese Systemfunktion funktioniert sowohl unter der Standard- als auch der einfachen Infrastruktur für die Erstellung von Abfragestatistiken. Weitere Informationen finden Sie unter Profilerstellungsinfrastruktur für Abfragen.

Unter den folgenden Bedingungen wird in der query_plan Spalte der zurückgegebenen Tabelle keine Showplan-Ausgabe zurückgegeben für sys.dm_exec_query_statistics_xml:

  • Wenn der Abfrageplan, der dem angegebenen session_id entspricht, nicht mehr ausgeführt wird, ist die query_plan Spalte der zurückgegebenen Tabelle null. Diese Bedingung könnte auftreten, wenn es eine Zeitverzögerung zwischen der Erfassung und der Verwendung des Planhandles mit sys.dm_exec_query_statistics_xml gibt.

Aufgrund einer Einschränkung der Anzahl der im XML-Datentyp zulässigen geschachtelten Ebenen können keine Abfragepläne zurückgegeben werden, sys.dm_exec_query_statistics_xml 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

Erfordert VIEW SERVER STATE Berechtigungen auf dem Server, in SQL Server 2019 (15.x) und früheren Versionen.

Erfordert VIEW SERVER PERFORMANCE STATE Berechtigungen auf dem Server, in SQL Server 2022 (16.x) und höheren Versionen.

Erfordert die VIEW DATABASE STATE Berechtigung in der Datenbank, auf den Premium-Ebenen der SQL-Datenbank.

Erfordert den Serveradministrator oder ein Microsoft Entra-Administratorkonto auf SQL-Datenbank-Standard- und Basisebenen.

Beispiele

A. Anzeigen von Liveabfrageplan- und Ausführungsstatistiken für einen laufenden Batch

Im folgenden Beispiel werden sys.dm_exec_requests abgefragt, um die entsprechende Abfrage zu suchen und den session_id-Wert aus der Ausgabe zu kopieren.

SELECT *
FROM sys.dm_exec_requests;
GO

Um dann die Live-Abfrageplan- und Ausführungsstatistiken zu erhalten, verwenden Sie die kopierte session_id mit der Systemfunktion sys.dm_exec_query_statistics_xml. Führen Sie diese Abfrage in einer anderen Sitzung als die Sitzung aus, in der Ihre Abfrage ausgeführt wird.

SELECT * FROM sys.dm_exec_query_statistics_xml(< copied session_id >);
GO

Oder kombiniert für alle ausgeführten Anforderungen. Führen Sie diese Abfrage in einer anderen Sitzung als die Sitzung aus, in der Ihre Abfrage ausgeführt wird.

SELECT eqs.query_plan,
       er.session_id,
       er.request_id,
       er.database_id,
       er.start_time,
       er.[status],
       er.wait_type,
       er.wait_resource,
       er.last_wait_type,
       (er.cpu_time / 1000) AS cpu_time_sec,
       (er.total_elapsed_time / 1000) / 60 AS elapsed_time_minutes,
       (er.logical_reads * 8) / 1024 AS logical_reads_KB,
       er.granted_query_memory,
       er.dop,
       er.row_count,
       er.query_hash,
       er.query_plan_hash
FROM sys.dm_exec_requests AS er
CROSS APPLY sys.dm_exec_query_statistics_xml(session_id) AS eqs
WHERE er.session_id <> @@SPID;
GO