sys.dm_exec_query_stats (Transact-SQL)
Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance
Gibt aggregierte Leistungsstatistiken 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.
Die Ergebnisse von sys.dm_exec_query_stats
können mit jeder Ausführung variieren, da die Daten nur abgeschlossene Abfragen und nicht die noch in-Flight widerspiegeln.
Um diesen DMV aus einem dedizierten SQL-Pool in Azure Synapse Analytics oder Analytics Platform System (PDW) aufzurufen, verwenden Sie den Namen sys.dm_pdw_nodes_exec_query_stats
. Verwenden Sie für serverlose SQL-Pool sys.dm_exec_query_stats
.
Spaltenname | Datentyp | Beschreibung |
---|---|---|
sql_handle |
varbinary(64) | Ein Token, das den Batch oder die gespeicherte Prozedur eindeutig identifiziert, zu der die Abfrage gehört.sql_handle kann zusammen mit statement_start_offset und statement_end_offset verwendet werden, um den SQL-Text der Abfrage abzurufen, indem die sys.dm_exec_sql_text dynamische Verwaltungsfunktion 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). Für Versionen vor SQL Server 2014 (12.x) gibt ein Wert von -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 einen Abfrageausführungsplan für einen Batch identifiziert, der ausgeführt wurde und sich sein Plan im Plancache befindet oder derzeit ausgeführt wird. Dieser Wert kann an die sys.dm_exec_query_plan dynamische Verwaltungsfunktion übergeben werden, um den Abfrageplan abzurufen. Immer 0x000 , wenn eine systemeigene kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt. |
creation_time |
datetime | Der Zeitpunkt, zu dem der Plan kompiliert wurde. Die Uhrzeit wird in der aktuellen Zeitzoneaufgezeichnet. |
last_execution_time |
datetime | Der Zeitpunkt, zu dem die Ausführung des Plans zuletzt gestartet wurde. Die Uhrzeit wird in der aktuellen Zeitzoneaufgezeichnet. |
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. Bei nativ kompilierten gespeicherten Prozeduren ist total_worker_time möglicherweise nicht korrekt, wenn viele Ausführungen weniger als 1 Millisekunden dauern. |
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. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
last_physical_reads |
bigint | Die Anzahl physischer Lesevorgänge bei der letzten Ausführung des Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
min_physical_reads |
bigint | Die bisherige minimale Anzahl physischer Lesevorgänge für eine einzelne Ausführung dieses Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
max_physical_reads |
bigint | Die bisherige maximale Anzahl physischer Lesevorgänge für eine einzelne Ausführung dieses Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
total_logical_writes |
bigint | Die Gesamtanzahl logischer Schreibvorgänge für Ausführungen dieses Plans seit der Kompilierung. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
last_logical_writes |
bigint | Die Anzahl der Pufferpoolseiten, die während der zuletzt abgeschlossenen Ausführung des Plans schmutzig sind. Nachdem eine Seite gelesen wurde, wird die Seite nur beim ersten Ändern geändert. Wenn eine Seite schmutzig wird, wird diese Zahl erhöht. Nachfolgende Änderungen einer bereits geänderten Seite wirken sich nicht auf diese Zahl aus. Diese Zahl 0 immer beim Abfragen einer speicheroptimierten Tabelle. |
min_logical_writes |
bigint | Die bisherige minimale Anzahl logischer Schreibvorgänge für eine einzelne Ausführung dieses Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
max_logical_writes |
bigint | Die bisherige maximale Anzahl logischer Schreibvorgänge für eine einzelne Ausführung dieses Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
total_logical_reads |
bigint | Die Gesamtanzahl logischer Lesevorgänge für Ausführungen dieses Plans seit der Kompilierung. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
last_logical_reads |
bigint | Die Anzahl logischer Lesevorgänge bei der letzten Ausführung des Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
min_logical_reads |
bigint | Die bisherige minimale Anzahl logischer Lesevorgänge für eine einzelne Ausführung dieses Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
max_logical_reads |
bigint | Die bisherige maximale Anzahl logischer Lesevorgänge für eine einzelne Ausführung dieses Plans. Immer beim Abfragen einer speicheroptimierten Tabelle 0 . |
total_clr_time |
bigint | Zeit, die in Mikrosekunden (aber nur genau für Millisekunden) gemeldet wurde, verwendet in Microsoft .NET Framework Common Language Runtime (CLR)-Objekten durch Ausführung dieses Plans seit der Kompilierung. Die CLR-Objekte können gespeicherte Prozeduren, Funktionen, Trigger, Typen und Aggregate sein. |
last_clr_time |
bigint | Die von der Ausführung innerhalb von .NET Framework CLR-Objekten während der letzten Ausführung dieses Plans verbrauchte Zeit, die in Mikrosekunden (aber nur in Millisekunden) angegeben wurde. Die CLR-Objekte können gespeicherte Prozeduren, Funktionen, Trigger, Typen und Aggregate sein. |
min_clr_time |
bigint | Minimale Zeit, die in Mikrosekunden (aber nur genau für Millisekunden) gemeldet wurde, dass dieser Plan in .NET Framework CLR-Objekten während einer einzigen Ausführung jemals verbraucht wurde. Die CLR-Objekte können gespeicherte Prozeduren, Funktionen, Trigger, Typen und Aggregate sein. |
max_clr_time |
bigint | Maximale Zeit, die in Mikrosekunden (aber nur genau für Millisekunden) gemeldet wurde, dass dieser Plan während einer einzigen Ausführung innerhalb der .NET Framework-CLR verbraucht wurde. 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. Immer 0x000 , wenn eine systemeigene kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt. |
total_rows |
bigint | Die Gesamtanzahl der von der Abfrage zurückgegebenen Zeilen. Darf nicht null sein. Immer 0 , wenn eine systemeigene 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. Immer 0 , wenn eine systemeigene kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt. |
min_rows |
bigint | Die mindeste Anzahl von Zeilen, die von der Abfrage während einer Ausführung jemals zurückgegeben wurden. Darf nicht null sein. Immer 0 , wenn eine systemeigene kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt. |
max_rows |
bigint | Maximale Anzahl von Zeilen, die jemals von der Abfrage während einer Ausführung zurückgegeben wurden. Darf nicht null sein. Immer 0 , wenn eine systemeigene kompilierte gespeicherte Prozedur eine speicheroptimierte Tabelle abfragt. |
statement_sql_handle |
varbinary(64) |
Gilt für: SQL Server 2014 (12.x) und höhere Versionen. Aufgefüllt mit Nicht-NULL-Werten nur, wenn Abfragespeicher aktiviert ist und die Statistiken für diese bestimmte Abfrage erfasst. |
statement_context_id |
bigint |
Gilt für: SQL Server 2014 (12.x) und höhere Versionen. Aufgefüllt mit Nicht-NULL-Werten nur, wenn Abfragespeicher aktiviert ist und die Statistiken für diese bestimmte Abfrage erfasst. |
total_dop |
bigint | Die Summe des Grads der Parallelität, den dieser Plan seit der Kompilierung verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
last_dop |
bigint | Der Grad der Parallelität, wenn dieser Plan das letzte Mal ausgeführt wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
min_dop |
bigint | Der minimale Grad der Parallelität, den dieser Plan jemals während einer Ausführung verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
max_dop |
bigint | Der maximale Grad an Parallelität, den dieser Plan jemals während einer Ausführung verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
total_grant_kb |
bigint | Die Gesamtmenge der reservierten Speichererteilung in KB dieses Plans, die seit der Kompilierung empfangen wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
last_grant_kb |
bigint | Die Menge der reservierten Speichererteilung in KB, wenn dieser Plan das letzte Mal ausgeführt wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
min_grant_kb |
bigint | Die minimale Menge der reservierten Speichererteilung in KB dieses Plans, die während einer Ausführung jemals empfangen wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
max_grant_kb |
bigint | Die maximale Menge an reservierter Speichererteilung in KB dieses Plans, die während einer Ausführung jemals empfangen wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
total_used_grant_kb |
bigint | Die Gesamtmenge der reservierten Speichererteilung in KB dieses Plans, der seit der Kompilierung verwendet wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
last_used_grant_kb |
bigint | Die Menge der verwendeten Speichererteilung in KB, wenn dieser Plan das letzte Mal ausgeführt wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
min_used_grant_kb |
bigint | Die minimale Menge an verwendeter Speichererteilung in KB in diesem Plan, der während einer Ausführung jemals verwendet wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
max_used_grant_kb |
bigint | Die maximale Menge an verwendeter Speichererteilung in KB in diesem Plan, der während einer Ausführung jemals verwendet wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
total_ideal_grant_kb |
bigint | Die Gesamtmenge der idealen Speichererteilung in KB dieses Plans, der seit der Kompilierung geschätzt wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
last_ideal_grant_kb |
bigint | Die Menge der idealen Speichererteilung in KB, wenn dieser Plan das letzte Mal ausgeführt wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
min_ideal_grant_kb |
bigint | Die minimale Menge der idealen Speichererteilung in KB in diesem Plan, die während einer Ausführung jemals geschätzt wird. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
max_ideal_grant_kb |
bigint | Die maximale Menge an idealer Speichererteilung in KB in diesem Plan, die während einer Ausführung jemals geschätzt wird. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
total_reserved_threads |
bigint | Die Gesamtsumme der reservierten parallelen Threads, die dieser Plan seit der Kompilierung verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
last_reserved_threads |
bigint | Die Anzahl der reservierten parallelen Threads, wenn dieser Plan zuletzt ausgeführt wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
min_reserved_threads |
bigint | Die Mindestanzahl reservierter paralleler Threads, die dieser Plan während einer Ausführung jemals verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
max_reserved_threads |
bigint | Die maximale Anzahl reservierter paralleler Threads, die dieser Plan während einer Ausführung jemals verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
total_used_threads |
bigint | Die Gesamtsumme der verwendeten parallelen Threads, die dieser Plan seit der Kompilierung verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
last_used_threads |
bigint | Die Anzahl der verwendeten parallelen Threads, wenn dieser Plan das letzte Mal ausgeführt wurde. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
min_used_threads |
bigint | Die Mindestanzahl der verwendeten parallelen Threads, die dieser Plan während einer Ausführung jemals verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
max_used_threads |
bigint | Die maximale Anzahl verwendeter paralleler Threads, die dieser Plan während einer Ausführung jemals verwendet hat. Immer 0 zum Abfragen einer speicheroptimierten Tabelle.Gilt für: SQL Server 2016 (13.x) und höhere Versionen. |
total_columnstore_segment_reads |
bigint | Die Summe der Spaltenspeichersegmente, die von der Abfrage gelesen werden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_reads |
bigint | Die Anzahl der Spaltenspeichersegmente, die von der letzten Ausführung der Abfrage gelesen werden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_reads |
bigint | Die Mindestanzahl der Spaltenspeichersegmente, die von der Abfrage während einer Ausführung gelesen wurden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_reads |
bigint | Die maximale Anzahl von Spaltenspeichersegmenten, die von der Abfrage während einer Ausführung gelesen wurden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
total_columnstore_segment_skips |
bigint | Die Summe der Spaltenspeichersegmente, die von der Abfrage übersprungen wurden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_skips |
bigint | Die Anzahl der Spaltenspeichersegmente, die von der letzten Ausführung der Abfrage übersprungen wurden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_skips |
bigint | Die Mindestanzahl der Spaltenspeichersegmente, die während einer Ausführung von der Abfrage übersprungen wurden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_skips |
bigint | Die maximale Anzahl von Spaltenspeichersegmenten, die während einer Ausführung von der Abfrage übersprungen wurden. Darf nicht null sein. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
total_spills |
bigint | Die Gesamtzahl der Seiten, die von der Ausführung dieser Abfrage seit der Kompilierung übergelaufen sind. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
last_spills |
bigint | Die Anzahl der Seiten, die beim letzten Ausführen der Abfrage übergelaufen sind. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
min_spills |
bigint | Die minimale Anzahl von Seiten, die diese Abfrage während einer einzelnen Ausführung jemals übergelaufen hat. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
max_spills |
bigint | Die maximale Anzahl von Seiten, die diese Abfrage während einer einzelnen Ausführung jemals übergelaufen hat. Gilt für: Ab SQL Server 2016 (13.x) SP2 und SQL Server 2017 (14.x) CU3 |
pdw_node_id |
int | Der Bezeichner für den Knoten, auf dem sich diese Verteilung befindet. Gilt für: Azure Synapse Analytics, Analytics Platform System (PDW) |
total_page_server_reads |
bigint | Die Gesamtzahl der Remoteseitenserverlesevorgänge, die von Ausführungen dieses Plans seit der Kompilierung ausgeführt wurden. Gilt für: Azure SQL-Datenbank Hyperscale |
last_page_server_reads |
bigint | Die Anzahl der Remoteseitenserverlesevorgänge, die beim letzten Ausführen des Plans ausgeführt wurden. Gilt für: Azure SQL-Datenbank Hyperscale |
min_page_server_reads |
bigint | Die Mindestanzahl der Remoteseitenserver liest, dass dieser Plan während einer einzelnen Ausführung jemals ausgeführt wurde. Gilt für: Azure SQL-Datenbank Hyperscale |
max_page_server_reads |
bigint | Die maximale Anzahl von Remoteseitenservern liest, dass dieser Plan während einer einzelnen Ausführung jemals ausgeführt wurde. Gilt für: Azure SQL-Datenbank Hyperscale |
Hinweis
1 Bei nativ kompilierten gespeicherten Prozeduren, wenn die Statistiksammlung aktiviert ist, werden die Arbeitszeiten in Millisekunden gesammelt. Wenn die Abfrage in weniger als einer Millisekunden ausgeführt wird, wird der Wert 0
.
Berechtigungen
SQL Server 2019 (15.x) und frühere Versionen und azure SQL Managed Instance erfordern VIEW SERVER STATE
Berechtigung.
SQL Server 2022 (16.x) und höhere Versionen erfordern VIEW SERVER PERFORMANCE STATE
Berechtigung auf dem Server.
In der Azure SQL-Datenbank Basic, S0und S1 Dienstziele sowie für Datenbanken in elastischen Poolsist das Serveradministrator- Konto, das Microsoft Entra-Administratorkonto oder die Mitgliedschaft in der ##MS_ServerStateReader##
Serverrolle erforderlich. Für alle anderen SQL-Datenbank-Dienstziele ist entweder die VIEW DATABASE STATE
-Berechtigung für die Datenbank oder die Mitgliedschaft in der ##MS_ServerStateReader##
-Serverrolle erforderlich.
Hinweise
Statistiken in der Sicht werden nach Abschluss einer Abfrage aktualisiert.
Beispiele
A. Suchen der TOP-N-Abfragen
Das folgende Beispiel gibt Informationen über die „Top-Fünf“-Abfragen gemessen an durchschnittlicher CPU-Zeit zurück. Die Abfragen werden in diesem Beispiel anhand des Abfragehashes aggregiert, sodass logisch identische Abfragen basierend auf dem kumulierten Ressourcenverbrauch gruppiert werden. Die spalte Sample_Statement_Text zeigt ein Beispiel für die Abfragestruktur, die dem Abfragehash entspricht, sie sollte jedoch ohne Bezug auf bestimmte Werte in der Anweisung gelesen werden. Wenn eine Anweisung z. B. WHERE Id = 5
enthält, können Sie sie in der generischeren Form lesen: WHERE Id = @some_value
.
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 Sample_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 von Zeilenanzahlaggregaten für eine Abfrage
Im folgenden Beispiel werden die Aggregatinformationen der Zeilenanzahl (Gesamtzeilen, Mindestzeilen, maximale 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;