sys.dm_exec_query_stats (Transact-SQL)
Gibt die Aggregatleistungsstatistik für zwischengespeicherte Abfragepläne 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. |
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
sql_handle |
varbinary(64) |
Ein Token, das auf den Batch oder die gespeicherte Prozedur verweist, von dem bzw. der die Abfrage Bestandteil ist. 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 (in Bytes) beginnend mit 0 die Startposition der Abfrage, die die Zeile beschreibt, innerhalb des Texts des Batches oder des permanenten Objekts an. |
statement_end_offset |
int |
Gibt (in Bytes) beginnend mit 0 die Endposition der Abfrage, die die Zeile beschreibt, innerhalb des Texts des Batches oder des permanenten Objekts an. Der Wert -1 gibt das Ende des Batches an. |
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, dessen Bestandteil die Abfrage ist. Dieser Wert kann an die dynamische Verwaltungsfunktion sys.dm_exec_query_plan übergeben werden, um den Abfrageplan abzurufen. |
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 |
Anzahl von Ausführungen des Plans seit der letzten Kompilierung. |
total_worker_time |
bigint |
CPU-Gesamtzeit in Mikrosekunden (aber nur auf Millisekunden genau) für Ausführungen dieses Plans seit der Kompilierung. |
last_worker_time |
bigint |
CPU-Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für die letzte Ausführung des Plans. |
min_worker_time |
bigint |
Minimale CPU-Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine einzelne Ausführung dieses Plans. |
max_worker_time |
bigint |
Maximale CPU-Zeit in Mikrosekunden (aber nur auf Millisekunden genau) für eine einzelne Ausführung dieses Plans. |
total_physical_reads |
bigint |
Gesamtanzahl physischer Lesevorgänge für Ausführungen dieses Plans seit der Kompilierung. |
last_physical_reads |
bigint |
Anzahl physischer Lesevorgänge bei der letzten Ausführung des Plans. |
min_physical_reads |
bigint |
Bisherige minimale Anzahl physischer Lesevorgänge für eine einzelne Ausführung dieses Plans. |
max_physical_reads |
bigint |
Bisherige maximale Anzahl physischer Lesevorgänge für eine einzelne Ausführung dieses Plans. |
total_logical_writes |
bigint |
Gesamtanzahl logischer Schreibvorgänge für Ausführungen dieses Plans seit der Kompilierung. |
last_logical_writes |
bigint |
Anzahl logischer Schreibvorgänge bei der letzten Ausführung des Plans. |
min_logical_writes |
bigint |
Bisherige minimale Anzahl logischer Schreibvorgänge für eine einzelne Ausführung dieses Plans. |
max_logical_writes |
bigint |
Bisherige maximale Anzahl logischer Schreibvorgänge für eine einzelne Ausführung dieses Plans. |
total_logical_reads |
bigint |
Gesamtanzahl logischer Lesevorgänge für Ausführungen dieses Plans seit der Kompilierung. |
last_logical_reads |
bigint |
Anzahl logischer Lesevorgänge bei der letzten Ausführung des Plans. |
min_logical_reads |
bigint |
Bisherige minimale Anzahl logischer Lesevorgänge für eine einzelne Ausführung dieses Plans. |
max_logical_reads |
bigint |
Bisherige maximale Anzahl logischer Lesevorgänge für eine einzelne Ausführung dieses Plans. |
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 für die Abfrage berechnet 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. Weitere Informationen finden Sie unter Suchen und Optimieren von ähnlichen Abfragen mit Abfrage und Abfrageplanhashes. |
query_plan_hash |
binary(8) |
Binärer Hashwert, der im Abfrageausführungsplan berechnet wird und zum Identifizieren ähnlicher Abfrageausführungspläne verwendet wird. Sie können diesen Hashwert verwenden, um die kumulierten Kosten für Abfragen mit ähnlichen Ausführungsplänen zu suchen. Weitere Informationen finden Sie unter Suchen und Optimieren von ähnlichen Abfragen mit Abfrage und Abfrageplanhashes. |
total_rows |
bigint |
Die Gesamtanzahl der von der Abfrage zurückgegebenen Zeilen. Darf nicht NULL sein. |
last_rows |
bigint |
Die Gesamtanzahl der bei der letzten Ausführung der Abfrage zurückgegebenen Zeilen. Darf nicht NULL sein. |
min_rows |
bigint |
Die minimale Anzahl der von der Abfrage zurückgegebenen Zeilen bei den Ausführungen des Plans seit der letzten Kompilierung. Darf nicht NULL sein. |
max_rows |
bigint |
Die maximale Anzahl der von der Abfrage zurückgegebenen Zeilen bei den Ausführungen des Plans seit der letzten Kompilierung. Darf nicht NULL sein. |
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 Abfragehashs aggregiert, sodass logisch identische Abfragen basierend auf dem kumulierten Ressourcenverbrauch gruppiert werden.
USE AdventureWorks2008R2;
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;
GO
B. Zurückgeben der Zeilenanzahlaggregate für eine Abfrage
Im folgenden Beispiel werden Informationen zu Zeilenanzahlaggregaten (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;