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_handle lze společně s statement_start_offset a statement_end_offset použí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 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;
Související obsah
- zobrazení a funkce související se spouštěním dynamické správy (Transact-SQL)
-
sys.dm_exec_sql_text (Transact-SQL) -
sys.dm_exec_query_plan (Transact-SQL) -
sys.dm_exec_procedure_stats (Transact-SQL) - sys.dm_exec_trigger_stats (Transact-SQL)
- sys.dm_exec_cached_plans (Transact-SQL)