Dela via


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 = 5kan 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;