Sdílet prostřednictvím


sys.dm_exec_query_stats (Transact-SQL)

platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instance

Vrátí agregovanou statistiku výkonu pro plány dotazů uložených v mezipaměti v SQL Serveru. Zobrazení obsahuje jeden řádek na příkaz dotazu v rámci plánu v mezipaměti a životnost řádků jsou svázané se samotným plánem. Při odebrání plánu z mezipaměti se z tohoto zobrazení odstraní odpovídající řádky.

Výsledky sys.dm_exec_query_stats se můžou s jednotlivými spuštěními lišit, protože data odrážejí jenom dokončené dotazy, a ne ty, které jsou stále v letu.

Pokud chcete toto zobrazení dynamické správy volat z vyhrazeného fondu SQL ve službě Azure Synapse Analytics nebo PdW (Analytics Platform System), použijte název sys.dm_pdw_nodes_exec_query_stats. Pro bezserverový fond SQL použijte sys.dm_exec_query_stats.

Název sloupce Datový typ Popis
sql_handle varbinary(64) Token, který jednoznačně identifikuje dávku nebo uloženou proceduru, na které je dotaz součástí.

sql_handlelze společně s statement_start_offset a statement_end_offsetpoužít k načtení textu SQL dotazu voláním funkce dynamické správy sys.dm_exec_sql_text.
statement_start_offset int Označuje počáteční pozici dotazu v bajtech počínaje číslem 0, kterou řádek popisuje v textu dávky nebo trvalého objektu.
statement_end_offset int Označuje koncové umístění dotazu v bajtech počínaje číslem 0, které řádek popisuje v textu dávky nebo trvalého objektu. U verzí před SQL Serverem 2014 (12.x) je hodnota -1 indikuje konec dávky. Koncové komentáře už nejsou zahrnuté.
plan_generation_num bigint Pořadové číslo, které lze použít k rozlišení mezi instancemi plánů po rekompilu.
plan_handle varbinary(64) Token, který jednoznačně identifikuje plán provádění dotazů pro dávku, která se spustila, a její plán se nachází v mezipaměti plánu nebo se právě spouští. Tuto hodnotu lze předat funkci dynamické správy sys.dm_exec_query_plan k získání plánu dotazu.

Vždy 0x000, když nativně zkompilovaná uložená procedura dotazuje tabulku optimalizovanou pro paměť.
creation_time data a času Čas kompilace plánu. Čas se zaznamenává v aktuálním časovém pásmu.
last_execution_time data a času Čas posledního spuštění plánu Čas se zaznamenává v aktuálním časovém pásmu.
execution_count bigint Počet spuštění plánu od poslední kompilace.
total_worker_time bigint Celková doba procesoru hlášená v mikrosekundách (ale pouze přesná pro milisekundy), která byla spotřebována spuštěním tohoto plánu od jeho kompilace.

U nativně kompilovaných uložených procedur nemusí být total_worker_time přesné, pokud mnoho spuštění trvá méně než 1 milisekundu.
last_worker_time bigint Čas procesoru hlášený v mikrosekundách (ale pouze přesný na milisekundy), který byl spotřebován při posledním spuštění plánu. 1
min_worker_time bigint Minimální doba procesoru hlášená v mikrosekundách (ale pouze přesná pro milisekundy), kterou tento plán spotřeboval během jednoho spuštění. 1
max_worker_time bigint Maximální doba procesoru hlášená v mikrosekundách (ale pouze přesná na milisekundy), kterou tento plán někdy spotřeboval během jednoho spuštění. 1
total_physical_reads bigint Celkový počet fyzických čtení provedených spuštěním tohoto plánu od kompilace.

Při dotazování tabulky optimalizované pro paměť vždy 0.
last_physical_reads bigint Počet fyzických čtení provedených při posledním spuštění plánu

Při dotazování tabulky optimalizované pro paměť vždy 0.
min_physical_reads bigint Minimální početfyzických

Při dotazování tabulky optimalizované pro paměť vždy 0.
max_physical_reads bigint Maximální početfyzických

Při dotazování tabulky optimalizované pro paměť vždy 0.
total_logical_writes bigint Celkový počet logických zápisů provedených spuštěním tohoto plánu od kompilace.

Při dotazování tabulky optimalizované pro paměť vždy 0.
last_logical_writes bigint Počet stránek fondu vyrovnávací paměti, které byly během posledního dokončení provádění plánu nešpiněné.

Po přečtení stránky se stránka změní jenom při jeho první úpravě. Když se stránka zašpiní, zvýší se toto číslo. Další úpravy již špinavé stránky nemají vliv na toto číslo.
Toto číslo vždy 0 při dotazování tabulky optimalizované pro paměť.
min_logical_writes bigint Minimální počet logickýchzápisch

Při dotazování tabulky optimalizované pro paměť vždy 0.
max_logical_writes bigint Maximální počet logických zápisů, které tento plán kdy provedl během jednoho spuštění.

Při dotazování tabulky optimalizované pro paměť vždy 0.
total_logical_reads bigint Celkový počet logických čtení provedených spuštěním tohoto plánu od kompilace.

Při dotazování tabulky optimalizované pro paměť vždy 0.
last_logical_reads bigint Počet logických čtení provedených při posledním spuštění plánu

Při dotazování tabulky optimalizované pro paměť vždy 0.
min_logical_reads bigint Minimální početlogických

Při dotazování tabulky optimalizované pro paměť vždy 0.
max_logical_reads bigint Maximální početlogických

Při dotazování tabulky optimalizované pro paměť vždy 0.
total_clr_time bigint Čas hlášený v mikrosekundách (ale pouze přesná pro milisekundy) spotřebovával v objektech CLR (Common Language Runtime) rozhraní Microsoft .NET Framework spuštěním tohoto plánu, protože byl zkompilován. Objekty CLR mohou být uložené procedury, funkce, triggery, typy a agregace.
last_clr_time bigint Čas hlášený v mikrosekundách (ale pouze přesných až milisekundách) spotřebovaných prováděním uvnitř objektů CLR rozhraní .NET Framework během posledního spuštění tohoto plánu. Objekty CLR mohou být uložené procedury, funkce, triggery, typy a agregace.
min_clr_time bigint Minimální doba hlášená v mikrosekundách (ale pouze přesná pro milisekundy), kterou tento plán během jednoho spuštění spotřeboval uvnitř objektů CLR rozhraní .NET Framework. Objekty CLR mohou být uložené procedury, funkce, triggery, typy a agregace.
max_clr_time bigint Maximální doba hlášená v mikrosekundách (ale pouze přesná pro milisekundy), kterou tento plán během jednoho spuštění spotřeboval uvnitř modulu CLR rozhraní .NET Framework. Objekty CLR mohou být uložené procedury, funkce, triggery, typy a agregace.
total_elapsed_time bigint Celkový uplynulý čas hlášený v mikrosekundách (ale pouze přesná na milisekundy) pro dokončení provádění tohoto plánu.
last_elapsed_time bigint Uplynulý čas hlášený v mikrosekundách (ale pouze přesná na milisekundy) pro naposledy dokončené provedení tohoto plánu.
min_elapsed_time bigint Minimální uplynulý čas hlášený v mikrosekundách (ale pouze přesná na milisekundy) pro jakékoli dokončení provádění tohoto plánu.
max_elapsed_time bigint Maximální uplynulý čas hlášený v mikrosekundách (ale pouze přesná na milisekundy) pro jakékoli dokončení provádění tohoto plánu.
query_hash Binary(8) Binární hodnota hash vypočítaná v dotazu a použitá k identifikaci dotazů s podobnou logikou. Pomocí hodnoty hash dotazu můžete určit agregované využití prostředků pro dotazy, které se liší pouze podle hodnot literálů.
query_plan_hash binární(8) Binární hodnota hash vypočítaná v plánu provádění dotazu a použitá k identifikaci podobných plánů provádění dotazů. K vyhledání kumulativních nákladů na dotazy s podobnými plány spuštění můžete použít hodnotu hash plánu dotazu.

Vždy 0x000, když nativně zkompilovaná uložená procedura dotazuje tabulku optimalizovanou pro paměť.
total_rows bigint Celkový počet řádků vrácených dotazem Nemůže mít hodnotu null.

Vždy 0, když nativně zkompilovaná uložená procedura dotazuje tabulku optimalizovanou pro paměť.
last_rows bigint Počet řádků vrácených posledním spuštěním dotazu Nemůže mít hodnotu null.

Vždy 0, když nativně zkompilovaná uložená procedura dotazuje tabulku optimalizovanou pro paměť.
min_rows bigint Minimální počet řádků vrácených dotazem během jednoho spuštění Nemůže mít hodnotu null.

Vždy 0, když nativně zkompilovaná uložená procedura dotazuje tabulku optimalizovanou pro paměť.
max_rows bigint Maximální počet řádků vrácených dotazem během jednoho spuštění Nemůže mít hodnotu null.

Vždy 0, když nativně zkompilovaná uložená procedura dotazuje tabulku optimalizovanou pro paměť.
statement_sql_handle varbinary(64) platí pro: SQL Server 2014 (12.x) a novější verze.

Naplněno hodnotami, které nemají hodnotu NULL, pouze pokud je úložiště dotazů zapnuté a shromažďuje statistiky pro daný dotaz.
statement_context_id bigint platí pro: SQL Server 2014 (12.x) a novější verze.

Naplněno hodnotami, které nemají hodnotu NULL, pouze pokud je úložiště dotazů zapnuté a shromažďuje statistiky pro daný dotaz.
total_dop bigint Celkový součet stupně paralelismu, který byl použit od kompilace. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
last_dop bigint Stupeň paralelismu při posledním spuštění tohoto plánu. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
min_dop bigint Minimální stupeň paralelismu, který byl tento plán někdy použit během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
max_dop bigint Maximální stupeň paralelismu, který byl tento plán někdy použit během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
total_grant_kb bigint Celková velikost grantu rezervované paměti v kb tento plán přijatý od kompilace. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
last_grant_kb bigint Velikost přidělení rezervované paměti v kB při posledním spuštění tohoto plánu. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
min_grant_kb bigint Minimální množství grantu rezervované paměti v kb tento plán kdy obdržel během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
max_grant_kb bigint Maximální množství grantu rezervované paměti v kB tento plán někdy obdržel během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
total_used_grant_kb bigint Celková velikost přidělení rezervované paměti v kb tento plán použitý od jeho kompilace. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
last_used_grant_kb bigint Množství využité paměti v kB při posledním spuštění tohoto plánu. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
min_used_grant_kb bigint Minimální velikost grantu využité paměti v kB tohoto plánu se kdy používala během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
max_used_grant_kb bigint Maximální velikost grantu využité paměti v kB tento plán kdy byla použita během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
total_ideal_grant_kb bigint Celková velikost ideálního přidělení paměti v kb tento plán odhadla od kompilace. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
last_ideal_grant_kb bigint Velikost ideálního přidělení paměti v kB při posledním spuštění tohoto plánu. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
min_ideal_grant_kb bigint Minimální množství ideálního přidělení paměti v kb tento plán odhadováno během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
max_ideal_grant_kb bigint Maximální velikost ideálního přidělení paměti v kB tento plán se někdy odhaduje během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
total_reserved_threads bigint Celkový součet rezervovanýchparalelních Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
last_reserved_threads bigint Počet rezervovaných paralelních vláken při posledním spuštění tohoto plánu. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
min_reserved_threads bigint Minimální počet rezervovaných paralelních vláken, které tento plán kdy používal během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
max_reserved_threads bigint Maximální počet rezervovaných paralelních vláken, které tento plán kdy používal během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
total_used_threads bigint Celkový součet použitých paralelních vláken, které tento plán kdy používal od jeho kompilace. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
last_used_threads bigint Počet použitých paralelních vláken při posledním spuštění tohoto plánu. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
min_used_threads bigint Minimální počet použitých paralelních vláken, které tento plán kdy používal během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
max_used_threads bigint Maximální počet použitých paralelních vláken, které tento plán kdy používal během jednoho spuštění. Vždy 0 pro dotazování tabulky optimalizované pro paměť.

platí pro: SQL Server 2016 (13.x) a novější verze.
total_columnstore_segment_reads bigint Celkový součet segmentů columnstore přečtených dotazem. Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
last_columnstore_segment_reads bigint Počet segmentů columnstore přečtených posledním spuštěním dotazu. Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
min_columnstore_segment_reads bigint Minimální početsegmentch Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
max_columnstore_segment_reads bigint Maximální počet segmentůcolumnch Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
total_columnstore_segment_skips bigint Celkový součet segmentů columnstore vynechán dotazem. Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
last_columnstore_segment_skips bigint Počet segmentů columnstore vynechaných posledním spuštěním dotazu. Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
min_columnstore_segment_skips bigint Minimální početsegmentch Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
max_columnstore_segment_skips bigint Maximální počet segmentůcolumnch Nemůže mít hodnotu null.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
total_spills bigint Celkový počet stránek přelitých provedením tohoto dotazu od kompilace.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
last_spills bigint Počet stránek se přetekl při posledním spuštění dotazu.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
min_spills bigint Minimální počet stránek, které tento dotaz někdy přetekl během jednoho spuštění.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
max_spills bigint Maximální počet stránek, které tento dotaz někdy přetekl během jednoho spuštění.

platí pro: Počínaje SQL Serverem 2016 (13.x) SP2 a SQL Serverem 2017 (14.x) CU3
pdw_node_id int Identifikátor uzlu, na který je tato distribuce zapnutá.

platí pro: Azure Synapse Analytics, Analytics Platform System (PDW)
total_page_server_reads bigint Celkový počet čtení vzdáleného serveru stránky provedených spuštěním tohoto plánu od kompilace.

platí pro: Hyperscale služby Azure SQL Database
last_page_server_reads bigint Počet čtení vzdáleného serveru stránky provedených při posledním spuštění plánu

platí pro: Hyperscale služby Azure SQL Database
min_page_server_reads bigint Minimální počet vzdálených stránkových serverů čte, že tento plán byl někdy proveden během jednoho spuštění.

platí pro: Hyperscale služby Azure SQL Database
max_page_server_reads bigint Maximální počet vzdálených stránkových serverů čte, že tento plán byl někdy proveden během jednoho spuštění.

platí pro: Hyperscale služby Azure SQL Database

Poznámka

1 Pro nativně zkompilované uložené procedury, když je povolena shromažďování statistik, shromažďuje se čas pracovního procesu v milisekundách. Pokud dotaz provede méně než jeden milisekund, hodnota je 0.

Dovolení

SQL Server 2019 (15.x) a starší verze a Azure SQL Managed Instance vyžadují oprávnění VIEW SERVER STATE.

SQL Server 2022 (16.x) a novější verze vyžadují VIEW SERVER PERFORMANCE STATE oprávnění na serveru.

Ve službě Azure SQL Database úrovně Basic, S0a S1 cíle služby a pro databáze v elastických fondech, účet správce serveru, účet správce Microsoft Entra nebo členství v roli serveru . U všech ostatních cílů služby SQL Database se vyžaduje buď oprávnění VIEW DATABASE STATE k databázi, nebo členství v roli serveru ##MS_ServerStateReader##.

Poznámky

Statistiky v zobrazení se aktualizují po dokončení dotazu.

Příklady

A. Vyhledání dotazů TOP N

Následující příklad vrátí informace o prvních pěti dotazech seřazených podle průměrného času procesoru. Tento příklad agreguje dotazy podle jejich hodnoty hash dotazu, aby se logicky ekvivalentní dotazy seskupily podle kumulativní spotřeby prostředků. Sloupec Sample_Statement_Text ukazuje příklad struktury dotazu, která odpovídá hodnotě hash dotazu, ale měla by být přečtená bez ohledu na konkrétní hodnoty v příkazu. Pokud například příkaz obsahuje WHERE Id = 5, můžete ho přečíst v jeho obecnější podobě: 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. Vrácení agregací počtu řádků pro dotaz

Následující příklad vrátí agregované informace o počtu řádků (celkový počet řádků, minimální řádky, maximální počet řádků a poslední řádky) pro dotazy.

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;