Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL databáze v Microsoft Fabric
Sleduje průběh dotazu v reálném čase během jeho vykonávání dotazu. Například použijte toto DMV k určení, která část dotazu běží pomalu. Připojte toto DMV k ostatním systémovým DMV pomocí sloupců uvedených v popisném poli. Nebo se připojte k tomuto DMV s dalšími výkonnostními čítači (například Performance Monitor, xperf) pomocí sloupců časových razítek.
Vrácená tabulka
Čítače vrácené jsou podle operátoru na vlákno. Výsledky jsou dynamické a neodpovídají výsledkům stávajících možností, například SET STATISTICS XML ON které vytvářejí výstup až po dokončení dotazu.
| Název sloupce | Datový typ | Description |
|---|---|---|
| identifikátor_sezení | smallint | Identifikuje relaci, ve které se tento dotaz sběží. Reference dm_exec_sessions.session_id. |
| id_požadavku | int | Identifikuje cílový požadavek. Reference dm_exec_sessions.request_id. |
| sql_handle | varbinary(64) | Je token, který jednoznačně identifikuje dávkovou nebo uloženou proceduru, jejíž je dotaz součástí. Reference dm_exec_query_stats.sql_handle. |
| plan_handle | varbinary(64) | Je token, který jednoznačně identifikuje plán provedení dotazu pro dávku, která byla vykonána a její plán se nachází v cache plánu, nebo je právě vykonává. Reference dm_exec_query_stats.plan_handle. |
| physical_operator_name | nvarchar(256) | Fyzické jméno operátora. |
| node_id | int | Identifikuje operátorový uzel ve stromu dotazů. |
| thread_id | int | Rozlišuje vlákna (pro paralelní dotaz) patřící ke stejnému uzlu operátoru dotazu. |
| adresa_úkolu | varbinary(8) | Identifikuje úkol SQLOS, který toto vlákno používá. Odkazy dm_os_tasks.task_address. |
| row_count | bigint | Počet řádků vrácených operátorem dosud. |
| rewind_count | bigint | Počet přetočení zpět zatím. |
| rebind_count | bigint | Počet přepojení zatím. |
| end_of_scan_count | bigint | Počet končních vyšetření zatím. |
| estimate_row_count | bigint | Odhadovaný počet řádků. Může být užitečné porovnat estimated_row_count se skutečnou row_count. |
| first_active_time | bigint | Čas, v milisekundách, kdy byl operátor poprvé vyvolán. |
| last_active_time | bigint | Čas, v milisekundách, kdy byl operátor naposledy volán. |
| open_time | bigint | Časové razítko, když je otevřeno (v milisekundách). |
| first_row_time | bigint | Časové razítko, kdy byl první řádek otevřen (v milisekundách). |
| last_row_time | bigint | Časové razítko, kdy byl otevřen poslední řádek (v milisekundách). |
| close_time | bigint | Časové razítko, když je blízko (v milisekundách). |
| elapsed_time_ms | bigint | Celkový uplynulý čas (v milisekundách) byl dosud využit operacemi cílového uzlu. |
| cpu_time_ms | bigint | Celkový čas CPU (v milisekundách) použitý operacemi cílového uzlu dosud. |
| database_id | smallint | ID databáze, která obsahuje objekt, na kterém se provádějí čtení a zápisy. |
| object_id | int | Identifikátor objektu, na kterém se provádějí čtení a zápisy. Reference sys.objects.object_id. |
| index_id | int | Index (pokud nějaký je), proti kterému se řádková sada otevírá. |
| scan_count | bigint | Počet skenů tabulek/indexů zatím. |
| logical_read_count | bigint | Počet logických čtení zatím. |
| physical_read_count | bigint | Počet fyzických přečtení zatím. |
| read_ahead_count | bigint | Počet předem přečtených přehledů zatím. |
| write_page_count | bigint | Počet napsání stránek kvůli rozlití stránek. |
| lob_logical_read_count | bigint | Počet logických čtení LOB zatím. |
| lob_physical_read_count | bigint | Počet fyzických čtení LOB zatím. |
| lob_read_ahead_count | bigint | Počet LOB read-aheadů zatím. |
| segment_read_count | int | Počet předem přečtených segmentů. |
| segment_skip_count | int | Počet segmentů, které byly zatím přeskočeny. |
| actual_read_row_count | bigint | Počet řádků přečtených operátorem před aplikací reziduálního predikátu. |
| estimated_read_row_count | bigint |
Platí na: Začal jsem SQL Server 2016 (13.x) SP1. Počet řádků, které operátor odhaduje na přečtení před aplikací reziduálního predikátu. |
Obecné poznámky
Pokud uzel plánu dotazu nemá žádné I/O, všechny čítače související s I/O jsou nastaveny na NULL.
Přepory související s I/O hlášenými tímto DMV jsou podrobnější než ty, které uvádí v SET STATISTICS IO následujících dvou ohledech:
SET STATISTICS IOseskupují čítače všech I/O do dané tabulky dohromady. S tímto DMV získáte samostatné čítače pro každý uzel v plánu dotazů, který provádí vstup/výstup do tabulky.Pokud probíhá paralelní skenování, toto DMV hlásí čítače pro každé paralelní vlákno pracující na skenování.
Od SQL Server 2016 (13.x) SP1 existuje standardní infrastruktura pro profilování statistik provádění dotazů vedle lehké infrastruktury pro profilování statistik provádění dotazů.
SET STATISTICS XML ON a SET STATISTICS PROFILE ON vždy používejte standardní infrastrukturu pro profilování statistik provádění dotazů. Aby sys.dm_exec_query_profiles bylo možné naplnit, musí být povolena jedna z infrastruktur pro profilování dotazů. Další informace najdete v tématu Infrastruktura profilace dotazů.
Poznámka:
Dotaz, který je předmětem šetření, musí začít po povolení infrastruktury pro profilování dotazů, jeho zapnutí po zahájení dotazu nepřinese výsledky v sys.dm_exec_query_profiles. Pro více informací o tom, jak povolit infrastruktury pro profilování dotazů, viz Infrastruktura profilování dotazů.
Povolení
- Na SQL Serveru a Azure SQL Managed Instance je
VIEW DATABASE STATEvyžadováno oprávnění a členství v databázovédb_ownerroli. - Na Azure SQL Database Premium Tiers vyžaduje oprávnění
VIEW DATABASE STATEv databázi. - U cílů služeb Azure SQL Database Basic, S0 a S1 a u databází v elastických poolech je vyžadován administrátorský účet serveru nebo administrátorský účet Microsoft Entra . U všech ostatních cílů SQL databázové služby je oprávnění vyžadováno
VIEW DATABASE STATEv databázi.
Oprávnění pro SQL Server 2022 a novější
Vyžaduje oprávnění ZOBRAZIT STAV VÝKONU DATABÁZE pro databázi.
Examples
Krok 1: Přihlaste se do relace, ve které plánujete spustit dotaz, který budete analyzovat.sys.dm_exec_query_profiles Pro konfiguraci dotazu pro profilování použijte SET STATISTICS PROFILE ON. Spusť svůj dotaz ve stejné relaci.
--Configure query for profiling with sys.dm_exec_query_profiles
SET STATISTICS PROFILE ON;
GO
--Or enable query profiling globally under SQL Server 2016 SP1 or above (not needed in SQL Server 2019)
DBCC TRACEON (7412, -1);
GO
--Next, run your query in this session, or in any other session if query profiling has been enabled globally
Krok 2: Přihlaste se do druhé relace, která se liší od relace, ve které běží váš dotaz.
Následující příkaz shrnuje pokrok dotazu, který právě běží v relaci 54. K tomu vypočítá celkový počet výstupních řádků ze všech vláken pro každý uzel a porovná jej s odhadovaným počtem výstupních řádků pro daný uzel.
--Run this in a different session than the session in which your query is running.
--Note that you may need to change session id 54 below with the session id you want to monitor.
SELECT node_id,physical_operator_name, SUM(row_count) row_count,
SUM(estimate_row_count) AS estimate_row_count,
CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)
FROM sys.dm_exec_query_profiles
WHERE session_id=54
GROUP BY node_id,physical_operator_name
ORDER BY node_id;
Viz také
Zobrazení a funkce dynamické správy (Transact-SQL)
zobrazení a funkce související se spouštěním dynamické správy (Transact-SQL)