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.

HinweisHinweis

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;