sys.dm_exec_query_profiles (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Övervakar förfråganens framsteg i realtid medan frågan körs. Använd till exempel denna DMV för att avgöra vilken del av frågan som går långsamt. Koppla denna DMV till andra system-DMV:er med hjälp av kolumnerna som anges i beskrivningsfältet. Eller koppla denna DMV till andra prestandaräknare (såsom Performance Monitor, xperf) genom att använda tidsstämpelkolumnerna.

Tabell returnerad

Räknarna som returneras är per operator per tråd. Resultaten är dynamiska och stämmer inte överens med resultaten från befintliga alternativ, såsom SET STATISTICS XML ON att endast skapa utdata när frågan är klar.

Kolumnnamn Datatyp Description
session_id smallint Identifierar sessionen där denna fråga körs. Referenser dm_exec_sessions.session_id.
förfrågan_id int Identifierar målbegäran. Referenser dm_exec_sessions.request_id.
sql_handle varbinary(64) Är en token som unikt identifierar batchen eller den lagrade procedur som frågan ingår i. Referenser dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Är en token som unikt identifierar en frågeexekveringsplan för en batch som har körts och vars plan finns i plancachen, eller för närvarande körs. Referenser dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Fysisk operatörsnamn.
node_id int Identifierar en operatornod i frågeträdet.
thread_id int Särskiljer trådarna (för en parallell fråga) som tillhör samma frågeoperatornod.
uppgiftsadress varbinary(8) Identifierar SQLOS-uppgiften som denna tråd använder. Referenser dm_os_tasks.task_address.
row_count bigint Antal rader som operatören hittills returnerat.
rewind_count bigint Antal tillbakagångar hittills.
rebind_count bigint Antal ombindningar hittills.
end_of_scan_count bigint Antal avslutade skanningar hittills.
estimate_row_count bigint Uppskattat antal rader. Det kan vara användbart att jämföra estimated_row_count med den faktiska row_count.
first_active_time bigint Tiden, i millisekunder, när operatören först blev uppringd.
last_active_time bigint Tiden, i millisekunder, när operatören senast blev uppringd.
open_time bigint Tidsstämpel när den är öppen (i millisekunder).
first_row_time bigint Tidsstämpel när första raden öppnades (i millisekunder).
last_row_time bigint Tidsstämpel när sista raden öppnades (i millisekunder).
close_time bigint Tidsstämpel när du är nära (i millisekunder).
förfluten_tid_ms bigint Total förfluten tid (i millisekunder) som hittills använts av målnodens operationer.
cpu_time_ms bigint Total CPU-tid (i millisekunder) som används av målnodens operationer hittills.
database_id smallint ID för databasen som innehåller objektet där läsningarna och skrivningarna utförs.
object_id int Identifieraren för objektet på vilket läsningarna och skrivningarna utförs. Referenser sys.objects.object_id.
index_id int Indexet (om något) som raduppsättningen öppnas mot.
scan_count bigint Antal tabell-/indexskanningar hittills.
logical_read_count bigint Antal logiska läsningar hittills.
physical_read_count bigint Antal fysiska läsningar hittills.
read_ahead_count bigint Antal lästips hittills.
write_page_count bigint Antal sidskrivningar hittills på grund av spill.
lob_logical_read_count bigint Antal logiska LOB-läsningar hittills.
lob_physical_read_count bigint Antal fysiska LOB-läsningar hittills.
lob_read_ahead_count bigint Antal LOB-läsningar hittills.
segment_read_count int Antal segmentläsningar hittills.
segment_skip_count int Antal segment har hoppats över hittills.
actual_read_row_count bigint Antal rader lästa av en operator innan residualpredikatet tillämpades.
estimated_read_row_count bigint Gäller för: Börjar med SQL Server 2016 (13.x) SP1.
Antal rader som uppskattas läsas av en operator innan restpredikatet applicerades.

Allmänna kommentarer

Om frågeplannoden inte har någon I/O, sätts alla I/O-relaterade räknare till NULL.

De I/O-relaterade räknarna som rapporteras av detta DMV är mer detaljerade än de som rapporteras av SET STATISTICS IO på följande två sätt:

  • SET STATISTICS IO gruppera räknarna för all I/O till en given tabell. Med detta DMV får du separata räknare för varje nod i frågeplanen som utför I/O till tabellen.

  • Om det sker en parallell skanning rapporterar denna DMV räknare för varje parallell tråd som arbetar med skanningen.

Från och med SQL Server 2016 (13.x) SP1 finns den standardiserade profilinfrastrukturen för profilering av frågeexekveringsstatistik sida vid sida med en lättviktig infrastruktur för profilering av frågeexekveringsstatistik. SET STATISTICS XML ON och SET STATISTICS PROFILE ON använd alltid standardinfrastrukturen för profilering av frågeexekveringsstatistik. För sys.dm_exec_query_profiles att fyllas måste en av frågorprofileringsinfrastrukturerna vara aktiverad. Mer information finns i infrastruktur för frågeprofilering.

Anmärkning

Sökningen som undersöks måste starta efter att frågeprofileringsinfrastrukturen har aktiverats, och aktivering efter att frågan startat ger inga resultat i sys.dm_exec_query_profiles. För mer information om hur man aktiverar frågeprofileringsinfrastrukturer, se Query Profiling Infrastructure.

Permissions

  • På SQL Server och Azure SQL Managed Instance krävs VIEW DATABASE STATE behörighet och medlemskap i db_owner databasrollen.
  • På Azure SQL Database Premium Tiers krävs behörighet VIEW DATABASE STATE i databasen.
  • På Azure SQL Database Basic, S0 och S1 tjänstemål, samt för databaser i elastiska pooler, krävs serveradministratörskontot eller Microsoft Entra-administratörskontot . För alla andra SQL-databastjänstemål VIEW DATABASE STATE krävs behörighet i databasen.

Behörigheter för SQL Server 2022 och senare

Kräver behörigheten VISA DATABASPRESTANDATILLSTÅND för databasen.

Examples

Steg 1: Logga in på en session där du planerar att köra den fråga du ska analysera med sys.dm_exec_query_profiles. För att konfigurera frågan för profilering använd SET STATISTICS PROFILE ON. Kör din fråga i samma session.

--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 

Steg 2: Logga in på en andra session som skiljer sig från den session där din fråga körs.

Följande uttalande sammanfattar framstegen som gjorts av den fråga som för närvarande körs i session 54. För att göra detta beräknar den det totala antalet utdatarader från alla trådar för varje nod och jämför det med det uppskattade antalet utdatarader för den noden.

--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;  

Se även

Vyer och funktioner för dynamisk hantering (Transact-SQL)
Körningsrelaterade vyer och funktioner för dynamisk hantering (Transact-SQL)