Sdílet prostřednictvím


sys.dm_exec_query_profiles (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL 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 IO seskupují čí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 STATE vyžadováno oprávnění a členství v databázové db_owner roli.
  • Na Azure SQL Database Premium Tiers vyžaduje oprávnění VIEW DATABASE STATE v 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 STATE v 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)