sys.dm_exec_query_stats (Transact-SQL)
gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
Returnerar sammanställd prestandastatistik för cachelagrade frågeplaner i SQL Server. Vyn innehåller en rad per frågeuttryck i den cachelagrade planen och radernas livslängd är kopplad till själva planen. När en plan tas bort från cachen tas motsvarande rader bort från den här vyn.
Resultatet av sys.dm_exec_query_stats
kan variera med varje körning eftersom data endast återspeglar färdiga frågor och inte de som fortfarande är under flygning.
Om du vill anropa denna DMV från en dedikerad SQL-pool i Azure Synapse Analytics eller Analytics Platform System (PDW) använder du namnet sys.dm_pdw_nodes_exec_query_stats
. För serverlös SQL-pool använder du sys.dm_exec_query_stats
.
Kolumnnamn | Datatyp | Beskrivning |
---|---|---|
sql_handle |
varbinary(64) | En token som unikt identifierar den batch eller lagrade procedur som frågan ingår i.sql_handle , tillsammans med statement_start_offset och statement_end_offset , kan användas för att hämta SQL-texten i frågan genom att anropa funktionen sys.dm_exec_sql_text dynamisk hantering. |
statement_start_offset |
int | Anger i byte, från och med 0, startpositionen för frågan som raden beskriver i texten i dess batch eller bevarade objekt. |
statement_end_offset |
int | Anger i byte, från och med 0, slutpositionen för frågan som raden beskriver i texten i dess batch eller bevarade objekt. För versioner före SQL Server 2014 (12.x) anger värdet -1 slutet av batchen. Avslutande kommentarer ingår inte längre. |
plan_generation_num |
bigint | Ett sekvensnummer som kan användas för att skilja mellan instanser av planer efter en omkompilering. |
plan_handle |
varbinary(64) | En token som unikt identifierar en frågekörningsplan för en batch som har körts och dess plan finns i plancachen eller körs för närvarande. Det här värdet kan skickas till funktionen sys.dm_exec_query_plan dynamisk hantering för att hämta frågeplanen. Alltid 0x000 när en inbyggt kompilerad lagrad procedur frågar en minnesoptimerad tabell. |
creation_time |
datetime | Tidpunkt då planen kompilerades. Tiden registreras i den aktuella tidszonen. |
last_execution_time |
datetime | Senast planen började köras. Tiden registreras i den aktuella tidszonen. |
execution_count |
bigint | Antal gånger som planen har körts sedan den senast kompilerades. |
total_worker_time |
bigint | Total cpu-tid, rapporterad i mikrosekunder (men endast korrekt för millisekunder), som förbrukades av körningar av den här planen sedan den kompilerades. För internt kompilerade lagrade procedurer kanske total_worker_time inte är korrekta om många körningar tar mindre än 1 millisekunder. |
last_worker_time |
bigint | CPU-tid, rapporterad i mikrosekunder (men endast korrekt för millisekunder), som förbrukades förra gången planen kördes. 1 |
min_worker_time |
bigint | Minsta CPU-tid, rapporterad i mikrosekunder (men endast korrekt för millisekunder), som den här planen någonsin har förbrukat under en enda körning. 1 |
max_worker_time |
bigint | Maximal CPU-tid, rapporterad i mikrosekunder (men endast korrekt för millisekunder), som den här planen någonsin har förbrukat under en enda körning. 1 |
total_physical_reads |
bigint | Totalt antal fysiska läsningar som utförts av körningar av den här planen sedan den kompilerades. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
last_physical_reads |
bigint | Antal fysiska läsningar som utfördes förra gången planen kördes. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
min_physical_reads |
bigint | Minsta antal fysiska läsningar som den här planen någonsin har utfört under en enda körning. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
max_physical_reads |
bigint | Maximalt antal fysiska läsningar som den här planen någonsin har utfört under en enda körning. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
total_logical_writes |
bigint | Totalt antal logiska skrivningar som utförts av körningar av den här planen sedan den kompilerades. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
last_logical_writes |
bigint | Antal sidor i buffertpoolen som grusas under den senast slutförda körningen av planen. När en sida har lästs blir sidan bara smutsig första gången den ändras. När en sida blir smutsig ökas det här talet. Efterföljande ändringar av en redan smutsig sida påverkar inte det här talet. Det här talet 0 alltid när du kör frågor mot en minnesoptimerad tabell. |
min_logical_writes |
bigint | Minsta antal logiska skrivningar som planen någonsin har utfört under en enda körning. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
max_logical_writes |
bigint | Maximalt antal logiska skrivningar som planen någonsin har utfört under en enda körning. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
total_logical_reads |
bigint | Totalt antal logiska läsningar som utförts av körningar av den här planen sedan den kompilerades. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
last_logical_reads |
bigint | Antal logiska läsningar som utfördes förra gången planen kördes. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
min_logical_reads |
bigint | Minsta antal logiska läsningar som den här planen någonsin har utfört under en enda körning. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
max_logical_reads |
bigint | Maximalt antal logiska läsningar som den här planen någonsin har utfört under en enda körning. Alltid 0 när du kör frågor mot en minnesoptimerad tabell. |
total_clr_time |
bigint | Tid, som rapporterats i mikrosekunder (men endast korrekta för millisekunder), som förbrukats i ClR-objekt (Microsoft .NET Framework Common Language Runtime) genom körningar av den här planen sedan den kompilerades. CLR-objekten kan lagras procedurer, funktioner, utlösare, typer och aggregeringar. |
last_clr_time |
bigint | Tid som rapporteras i mikrosekunder (men endast korrekta för millisekunder) som förbrukas av körning i .NET Framework CLR-objekt under den senaste körningen av den här planen. CLR-objekten kan lagras procedurer, funktioner, utlösare, typer och aggregeringar. |
min_clr_time |
bigint | Minsta tid, rapporterad i mikrosekunder (men endast korrekt för millisekunder), som den här planen någonsin har förbrukat i .NET Framework CLR-objekt under en enda körning. CLR-objekten kan lagras procedurer, funktioner, utlösare, typer och aggregeringar. |
max_clr_time |
bigint | Maximal tid, rapporterad i mikrosekunder (men endast korrekt för millisekunder), som den här planen någonsin har förbrukat i .NET Framework CLR under en enda körning. CLR-objekten kan lagras procedurer, funktioner, utlösare, typer och aggregeringar. |
total_elapsed_time |
bigint | Total förfluten tid, rapporterad i mikrosekunder (men endast korrekt till millisekunder), för slutförda körningar av den här planen. |
last_elapsed_time |
bigint | Förfluten tid, rapporterad i mikrosekunder (men endast korrekt till millisekunder), för den senast slutförda körningen av den här planen. |
min_elapsed_time |
bigint | Minsta förflutna tid, rapporterad i mikrosekunder (men endast korrekt till millisekunder) för slutförd körning av planen. |
max_elapsed_time |
bigint | Maximal förfluten tid, rapporterad i mikrosekunder (men endast korrekt för millisekunder) för slutförd körning av planen. |
query_hash |
Binary(8) | Binär hash-värde som beräknas på frågan och används för att identifiera frågor med liknande logik. Du kan använda frågehashen för att fastställa den aggregerade resursanvändningen för frågor som endast skiljer sig åt med literalvärden. |
query_plan_hash |
binär(8) | Binär hash-värde som beräknas på frågekörningsplanen och används för att identifiera liknande frågekörningsplaner. Du kan använda hash för frågeplan för att hitta den kumulativa kostnaden för frågor med liknande körningsplaner. Alltid 0x000 när en inbyggt kompilerad lagrad procedur frågar en minnesoptimerad tabell. |
total_rows |
bigint | Totalt antal rader som returneras av frågan. Kan inte vara null. Alltid 0 när en inbyggt kompilerad lagrad procedur frågar en minnesoptimerad tabell. |
last_rows |
bigint | Antal rader som returnerades av den senaste körningen av frågan. Kan inte vara null. Alltid 0 när en inbyggt kompilerad lagrad procedur frågar en minnesoptimerad tabell. |
min_rows |
bigint | Minsta antal rader som någonsin returnerats av frågan under en körning. Kan inte vara null. Alltid 0 när en inbyggt kompilerad lagrad procedur frågar en minnesoptimerad tabell. |
max_rows |
bigint | Maximalt antal rader som någonsin returnerats av frågan under en körning. Kan inte vara null. Alltid 0 när en inbyggt kompilerad lagrad procedur frågar en minnesoptimerad tabell. |
statement_sql_handle |
varbinary(64) |
gäller för: SQL Server 2014 (12.x) och senare versioner. Fylls endast med icke-NULL-värden om Query Store är aktiverat och samlar in statistik för den specifika frågan. |
statement_context_id |
bigint |
gäller för: SQL Server 2014 (12.x) och senare versioner. Fylls endast med icke-NULL-värden om Query Store är aktiverat och samlar in statistik för den specifika frågan. |
total_dop |
bigint | Den totala mängden parallellitet som planen använde sedan den sammanställdes. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
last_dop |
bigint | Graden av parallellitet när planen kördes förra gången. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
min_dop |
bigint | Den minsta grad av parallellitet som planen någonsin använt under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
max_dop |
bigint | Den maximala grad av parallellitet som planen någonsin använt under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
total_grant_kb |
bigint | Den totala mängden reserverat minne i kB som den här planen har tagit emot sedan den kompilerades. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
last_grant_kb |
bigint | Mängden reserverat minne som beviljas i KB när den här planen kördes förra gången. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
min_grant_kb |
bigint | Den minsta mängd reserverat minne som beviljats i KB som den här planen någonsin tagit emot under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
max_grant_kb |
bigint | Den maximala mängden reserverat minne i KB som den här planen någonsin tagit emot under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
total_used_grant_kb |
bigint | Den totala mängden reserverat minne som beviljats i KB som användes sedan den kompilerades. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
last_used_grant_kb |
bigint | Mängden använt minne som beviljades i KB när den här planen kördes förra gången. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
min_used_grant_kb |
bigint | Den minsta mängd använt minne som beviljats i KB den här planen som någonsin använts under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
max_used_grant_kb |
bigint | Den maximala mängden använt minne som beviljats i KB den här planen som någonsin använts under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
total_ideal_grant_kb |
bigint | Den totala mängden idealiskt minnesbidrag i KB som den här planen uppskattades sedan den kompilerades. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
last_ideal_grant_kb |
bigint | Mängden idealiskt minne i KB när den här planen kördes förra gången. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
min_ideal_grant_kb |
bigint | Den minsta mängden idealiskt minne i KB som den här planen någonsin uppskattade under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
max_ideal_grant_kb |
bigint | Den maximala mängden idealiskt minne i KB som den här planen någonsin uppskattade under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
total_reserved_threads |
bigint | Den totala summan av reserverade parallella trådar som planen någonsin använt sedan den kompilerades. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
last_reserved_threads |
bigint | Antalet reserverade parallella trådar när planen kördes förra gången. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
min_reserved_threads |
bigint | Det minsta antalet reserverade parallella trådar som planen någonsin använt under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
max_reserved_threads |
bigint | Det maximala antalet reserverade parallella trådar som den här planen någonsin använt under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
total_used_threads |
bigint | Den totala summan av använda parallella trådar som planen någonsin använt sedan den kompilerades. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
last_used_threads |
bigint | Antalet parallella trådar som användes när planen kördes förra gången. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
min_used_threads |
bigint | Det minsta antalet parallella trådar som planen någonsin använt under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
max_used_threads |
bigint | Det maximala antalet använda parallella trådar som den här planen någonsin använt under en körning. Alltid 0 för att köra frågor mot en minnesoptimerad tabell.gäller för: SQL Server 2016 (13.x) och senare versioner. |
total_columnstore_segment_reads |
bigint | Den totala summan av kolumnlagringssegment som lästs av frågan. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_reads |
bigint | Antalet kolumnlagringssegment som lästes av den senaste körningen av frågan. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_reads |
bigint | Det minsta antalet kolumnlagringssegment som någonsin lästs av frågan under en körning. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_reads |
bigint | Det maximala antalet kolumnlagringssegment som någonsin lästs av frågan under en körning. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
total_columnstore_segment_skips |
bigint | Den totala summan av kolumnlagringssegment som hoppas över av frågan. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
last_columnstore_segment_skips |
bigint | Antalet kolumnlagringssegment som hoppades över vid den senaste körningen av frågan. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
min_columnstore_segment_skips |
bigint | Det minsta antalet kolumnlagringssegment som någonsin hoppas över av frågan under en körning. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
max_columnstore_segment_skips |
bigint | Det maximala antalet kolumnlagringssegment som någonsin hoppat över av frågan under en körning. Kan inte vara null. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
total_spills |
bigint | Det totala antalet sidor som spillts genom körning av den här frågan sedan den kompilerades. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
last_spills |
bigint | Antalet sidor som spilldes förra gången frågan kördes. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
min_spills |
bigint | Det minsta antalet sidor som den här frågan någonsin har spillt under en enda körning. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
max_spills |
bigint | Det maximala antalet sidor som den här frågan någonsin har spillt under en enda körning. gäller för: Från och med SQL Server 2016 (13.x) SP2 och SQL Server 2017 (14.x) CU3 |
pdw_node_id |
int | Identifieraren för noden som den här fördelningen är på. gäller för: Azure Synapse Analytics, Analytics Platform System (PDW) |
total_page_server_reads |
bigint | Totalt antal fjärrsidesserverläsningar som utförts av körningar av den här planen sedan den kompilerades. gäller för: Azure SQL Database Hyperscale |
last_page_server_reads |
bigint | Antal fjärrsidesserverläsningar som utfördes senast planen kördes. gäller för: Hyperskala för Azure SQL Database |
min_page_server_reads |
bigint | Minsta antal fjärrsidesserverläsningar som den här planen någonsin har utfört under en enda körning. gäller för: Hyperskala för Azure SQL Database |
max_page_server_reads |
bigint | Maximalt antal fjärrsidesserverläsningar som den här planen någonsin har utfört under en enda körning. gäller för: Hyperskala för Azure SQL Database |
Not
1 För internt kompilerade lagrade procedurer när statistikinsamling är aktiverad samlas arbetstiden in i millisekunder. Om frågan körs på mindre än en millisekunder är värdet 0
.
Behörigheter
SQL Server 2019 (15.x) och tidigare versioner och Azure SQL Managed Instance kräver VIEW SERVER STATE
behörighet.
SQL Server 2022 (16.x) och senare versioner kräver VIEW SERVER PERFORMANCE STATE
behörighet på servern.
I Azure SQL Database Basic, S0och S1 servicemål och för databaser i elastiska pooler, serveradministratör konto, Microsoft Entra-administratör konto eller medlemskap i ##MS_ServerStateReader##
serverrollen krävs. För alla andra SQL Database-tjänstmål krävs antingen VIEW DATABASE STATE
behörighet för databasen eller medlemskap i ##MS_ServerStateReader##
serverrollen.
Anmärkningar
Statistik i vyn uppdateras när en fråga har slutförts.
Exempel
A. Hitta TOP N-frågorna
I följande exempel returneras information om de fem vanligaste frågorna rangordnade efter genomsnittlig CPU-tid. Det här exemplet aggregerar frågorna enligt deras frågehash så att logiskt likvärdiga frågor grupperas efter deras kumulativa resursförbrukning. Kolumnen Sample_Statement_Text visar ett exempel på frågestrukturen som matchar frågehashen, men den bör läsas utan hänsyn till specifika värden i -instruktionen. Om en instruktion till exempel innehåller WHERE Id = 5
kan du läsa den i dess mer allmänna form: 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. Returnera radantalsaggregeringar för en fråga
I följande exempel returneras mängdinformation för radantal (totalt antal rader, minsta rader, maximalt antal rader och sista rader) för frågor.
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;