sys.dm_exec_query_stats (Transact-SQL)

 

Gibt die zusammengefasste Leistungsstatistik für zwischengespeicherte Abfragepläne in SQL Server zurück. Diese Sicht enthält eine Zeile pro Abfrageanweisung innerhalb des zwischengespeicherten Plans, und die Lebensdauer der Zeilen ist an den Plan selbst gebunden. Wenn ein Plan aus dem Cache entfernt wird, werden die entsprechenden Zeilen aus dieser Sicht entfernt.

Hinweis

Die erste Abfrage von sys.dm_exec_query_stats kann zu ungenauen Ergebnissen führen, wenn derzeit eine hohe Arbeitsauslastung auf dem Server besteht. Erneutes Ausführen der Abfrage liefert unter Umständen genauere Ergebnisse.

Gilt für: SQL Server (SQL Server 2008 bis zur aktuellen Version), Azure SQL-Datenbank.

Spaltenname

Datentyp

Beschreibung

sql_handle

varbinary(64)

Ein Token, das auf den Batch oder die gespeicherte Prozedur verweist, dem bzw. der die Abfrage angehört.

sql_handle kann zusammen mit statement_start_offset und statement_end_offset verwendet werden, um den SQL-Text der Abfrage abzurufen, indem die dynamische Verwaltungsfunktion sys.dm_exec_sql_text aufgerufen wird.

statement_start_offset

int

Gibt die Startposition der Abfrage, die in der Zeile beschrieben wird, beginnend mit 0 im Text des zugehörigen persistenten Objekts oder Batchobjekts an (in Bytes).

statement_end_offset

int

Gibt die Endposition der Abfrage, die in der Zeile beschrieben wird, beginnend mit 0 im Text des zugehörigen persistenten Objekts oder Batchobjekts an (in Bytes). Bei Versionen vor SQL Server 2014 gibt der Wert -1 das Ende des Batches an. Nachfolgende Kommentare sind nicht mehr enthalten.

plan_generation_num

bigint

Eine Sequenznummer, anhand der nach einer Neukompilierung zwischen einzelnen Instanzen von Plänen unterschieden werden kann.

plan_handle

varbinary(64)

Ein Token, das auf den kompilierten Plan verweist, dem die Abfrage angehört. Dieser Wert kann an die dynamische Verwaltungsfunktion sys.dm_exec_query_plan übergeben werden, um den Abfrageplan abzurufen.

Ist immer 0x000, wenn eine systemintern kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt.

creation_time

datetime

Der Zeitpunkt, zu dem der Plan kompiliert wurde.

last_execution_time

datetime

Der Zeitpunkt, zu dem die Ausführung des Plans zuletzt gestartet wurde.

execution_count

bigint

Die Anzahl von Planausführungen seit der letzten Kompilierung.

total_worker_time

bigint

Die CPU-Gesamtzeit in Mikrosekunden (aber nur auf Millisekunden genau) für Ausführungen dieses Plans seit der Kompilierung.

Wenn zahlreiche Ausführungen weniger als 1 Millisekunde dauern, wird total_worker_time bei systemintern kompilierten gespeicherten Prozeduren u. U. nicht exakt angegeben.

last_worker_time

bigint

Die CPU-Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für die letzte Ausführung des Plans.1

min_worker_time

bigint

Die minimale CPU-Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine einzelne Ausführung dieses Plans.1

max_worker_time

bigint

Maximale CPU-Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine einzelne Ausführung dieses Plans.1

total_physical_reads

bigint

Die Gesamtanzahl physischer Lesevorgänge für Ausführungen dieses Plans seit der Kompilierung.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

last_physical_reads

bigint

Die Anzahl physischer Lesevorgänge bei der letzten Ausführung des Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

min_physical_reads

bigint

Die bisherige minimale Anzahl physischer Lesevorgänge für eine einzelne Ausführung dieses Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

max_physical_reads

bigint

Die bisherige maximale Anzahl physischer Lesevorgänge für eine einzelne Ausführung dieses Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

total_logical_writes

bigint

Die Gesamtanzahl logischer Schreibvorgänge für Ausführungen dieses Plans seit der Kompilierung.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

last_logical_writes

bigint

Die Anzahl der Pufferpoolseiten, die seit der letzten Planausführung modifiziert wurden. Wenn eine Seite bereits modifiziert (geändert) wurde, werden keine Schreibvorgänge gezählt.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

min_logical_writes

bigint

Die bisherige minimale Anzahl logischer Schreibvorgänge für eine einzelne Ausführung dieses Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

max_logical_writes

bigint

Die bisherige maximale Anzahl logischer Schreibvorgänge für eine einzelne Ausführung dieses Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

total_logical_reads

bigint

Die Gesamtanzahl logischer Lesevorgänge für Ausführungen dieses Plans seit der Kompilierung.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

last_logical_reads

bigint

Die Anzahl logischer Lesevorgänge bei der letzten Ausführung des Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

min_logical_reads

bigint

Die bisherige minimale Anzahl logischer Lesevorgänge für eine einzelne Ausführung dieses Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

max_logical_reads

bigint

Die bisherige maximale Anzahl logischer Lesevorgänge für eine einzelne Ausführung dieses Plans.

Ist immer 0, wenn eine speicheroptimierte Tabelle abgefragt wird.

total_clr_time

bigint

Zeit in Mikrosekunden (aber nur auf Millisekunden genau) in Microsoft.NET Framework CLR-Objekten (Common Language Runtime) für Ausführungen dieses Plans seit der Kompilierung. Die CLR-Objekte können gespeicherte Prozeduren, Funktionen, Trigger, Typen und Aggregate sein.

last_clr_time

bigint

Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für die Ausführung in .NET Framework CLR-Objekten während der letzten Ausführung dieses Plans. Die CLR-Objekte können gespeicherte Prozeduren, Funktionen, Trigger, Typen und Aggregate sein.

min_clr_time

bigint

Minimale Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine einzelne Ausführung dieses Plans in .NET Framework CLR-Objekten. Die CLR-Objekte können gespeicherte Prozeduren, Funktionen, Trigger, Typen und Aggregate sein.

max_clr_time

bigint

Maximale Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine einzelne Ausführung dieses Plans in .NET Framework CLR. Die CLR-Objekte können gespeicherte Prozeduren, Funktionen, Trigger, Typen und Aggregate sein.

total_elapsed_time

bigint

Insgesamt verstrichene Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für abgeschlossene Ausführungen dieses Plans.

last_elapsed_time

bigint

Verstrichene Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für die letzte abgeschlossene Ausführung dieses Plans.

min_elapsed_time

bigint

Mindestens verstrichene Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine beliebige abgeschlossene Ausführung dieses Plans.

max_elapsed_time

bigint

Maximal verstrichene Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine beliebige abgeschlossene Ausführung dieses Plans.

query_hash

Binary(8)

Binärer Hashwert, der in der Abfrage berechnet wird und zum Identifizieren von Abfragen mit ähnlicher Logik verwendet wird. Sie können den Abfragehash verwenden, um die aggregierte Ressourcennutzung für Abfragen zu ermitteln, die sich nur durch Literalwerte unterscheiden.

query_plan_hash

binary(8)

Binärer Hashwert, der im Abfrageausführungsplan wird und zum Identifizieren ähnlicher Abfrageausführungspläne verwendet wird. Sie können diesen Abfrageplan-Hashwert verwenden, um die kumulierten Kosten für Abfragen mit ähnlichen Ausführungsplänen zu suchen.

Ist immer 0x000, wenn eine systemintern kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt.

total_rows

bigint

Die Gesamtanzahl der von der Abfrage zurückgegebenen Zeilen. Darf nicht NULL sein.

Ist immer 0, wenn eine systemintern kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt.

last_rows

bigint

Die Anzahl der bei der letzten Ausführung der Abfrage zurückgegebenen Zeilen. Darf nicht NULL sein.

Ist immer 0, wenn eine systemintern kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt.

min_rows

bigint

Die minimale Anzahl der von der Abfrage zurückgegebenen Zeilen bei den Planausführungen seit der letzten Kompilierung. Darf nicht NULL sein.

Ist immer 0, wenn eine systemintern kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt.

max_rows

bigint

Die maximale Anzahl der von der Abfrage zurückgegebenen Zeilen bei den Planausführungen seit der letzten Kompilierung. Darf nicht NULL sein.

Ist immer 0, wenn eine systemintern kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt.

statement_sql_handle

varbinary(64)

Gilt für: SQL Server 2014 bis SQL Server 2014.

Zur künftigen Verwendung reserviert.

statement_context_id

bigint

Gilt für: SQL Server 2014 bis SQL Server 2014.

Zur künftigen Verwendung reserviert.

1 Wenn die Statistiksammlung für systemintern kompilierte gespeicherte Prozeduren aktiviert ist, wird worker_time in Millisekunden erfasst. Wird die Abfrage in weniger als einer Millisekunde ausgeführt, lautet der Wert 0.

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.

Hinweise

Statistiken in der Sicht werden nach Abschluss einer Abfrage aktualisiert.

Beispiele

A. Suchen der TOP-N-Abfragen

Das folgende Beispiel gibt Informationen zu den fünf Abfragen mit dem höchsten durchschnittlichen CPU-Zeitaufwand zurück. Die Abfragen werden in diesem Beispiel anhand des Abfragehashes aggregiert, sodass logisch identische Abfragen basierend auf dem kumulierten Ressourcenverbrauch gruppiert werden.

USE AdventureWorks2012; GO SELECT TOP 5 query_stats.query_hash AS "Query Hash", SUM(query_stats.total_worker_time) / SUM(query_stats.execution_count) AS "Avg CPU Time", MIN(query_stats.statement_text) AS "Statement Text" FROM (SELECT QS.*, SUBSTRING(ST.text, (QS.statement_start_offset/2) + 1, ((CASE statement_end_offset WHEN -1 THEN DATALENGTH(ST.text) ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1) AS statement_text FROM sys.dm_exec_query_stats AS QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST) as query_stats GROUP BY query_stats.query_hash ORDER BY 2 DESC;

B. Zurückgeben der aggregierten Zeilenanzahlen für eine Abfrage

Im folgenden Beispiel werden Informationen zu aggregierten Zeilenanzahlen (Gesamtanzahl der Zeilen, minimale Anzahl der Zeilen, maximale Anzahl der Zeilen und letzte Zeilen) für Abfragen zurückgegeben.

SELECT qs.execution_count, SUBSTRING(qt.text,qs.statement_start_offset/2 +1, (CASE WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), qt.text)) * 2 ELSE qs.statement_end_offset end - qs.statement_start_offset )/2 ) AS query_text, qt.dbid, dbname= DB_NAME (qt.dbid), qt.objectid, qs.total_rows, qs.last_rows, qs.min_rows, qs.max_rows FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt WHERE qt.text like '%SELECT%' ORDER BY qs.execution_count DESC;

Siehe auch

Dynamische Verwaltungssichten und Funktionen (Transact-SQL)
Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit der Ausführung (Transact-SQL)
sys.dm_exec_sql_text (Transact-SQL)
sys.dm_exec_query_plan (Transact-SQL)