Delen via


sys.dm_exec_query_profiles (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Monitort de voortgang van realtime query's terwijl de query wordt uitgevoerd. Gebruik bijvoorbeeld deze DMV om te bepalen welk deel van de query traag draait. Voeg deze DMV aan met andere systeem-DMV's via de kolommen die in het beschrijvingsveld zijn geïdentificeerd. Of voeg deze DMV samen met andere prestatietellers (zoals Performance Monitor, xperf) door gebruik te maken van de tijdstempelkolommen.

Tabel geretourneerd

De teruggegeven tellers zijn per operator per thread. De resultaten zijn dynamisch en komen niet overeen met de resultaten van bestaande opties, zoals SET STATISTICS XML ON die alleen output genereren wanneer de query is voltooid.

Kolomnaam Gegevenstype Description
sessie-id smallint Identificeert de sessie waarin deze query draait. Referenties dm_exec_sessions.session_id.
request_id int Identificeert het doelverzoek. Referenties dm_exec_sessions.request_id.
sql_handle varbinary(64) Is een token dat uniek de batch of opgeslagen procedure identificeert waarvan de query deel uitmaakt. Referenties dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Is een token dat uniek een query-uitvoeringsplan identificeert voor een batch die is uitgevoerd en waarvan het plan zich in de plancache bevindt, of momenteel uitvoert. Referenties dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Naam van de fysieke operator.
node_id int Identificeert een operatorknoop in de queryboom.
thread_id int Onderscheidt de threads (voor een parallelle query) die tot dezelfde query-operator node behoren.
taak_adres varbinary(8) Identificeert de SQLOS-taak die deze thread gebruikt. Referenties dm_os_tasks.task_address.
row_count bigint Aantal rijen tot nu toe door de operator teruggegeven.
rewind_count bigint Aantal terugspoelbewegingen tot nu toe.
rebind_count bigint Aantal herbindingen tot nu toe.
end_of_scan_count bigint Aantal eindscans tot nu toe.
estimate_row_count bigint Geschat aantal rijen. Het kan nuttig zijn om estimated_row_count te vergelijken met de daadwerkelijke row_count.
first_active_time bigint De tijd, in milliseconden, toen de operator voor het eerst werd gebeld.
last_active_time bigint De tijd, in milliseconden, wanneer de operator voor het laatst werd gebeld.
open_time bigint Tijdstempel wanneer open (in milliseconden).
first_row_time bigint Tijdstempel wanneer de eerste rij werd geopend (in milliseconden).
last_row_time bigint Tijdstempel wanneer de laatste rij werd geopend (in milliseconden).
close_time bigint Tijdstempel als je dichtbij bent (in milliseconden).
elapsed_time_ms bigint De totale verstreken tijd (in milliseconden) die tot nu toe door de operaties van de doelknoop is gebruikt.
cpu_time_ms bigint Totale CPU-tijd (in milliseconden) tot nu toe door de operaties van de doelnode gebruikt.
database_id smallint ID van de database die het object bevat waarop de reads en writes worden uitgevoerd.
object_id int De identificatie voor het object waarop de lees- en schrijfacties worden uitgevoerd. Referenties sys.objects.object_id.
index_id int De index (indien aanwezig) waartegen de rijset wordt geopend.
scan_count bigint Aantal tabel-/indexscans tot nu toe.
logical_read_count bigint Aantal logische lezingen tot nu toe.
physical_read_count bigint Aantal fysieke lezingen tot nu toe.
read_ahead_count bigint Aantal leesvoorlezen tot nu toe.
write_page_count bigint Aantal pagina-schrijfopdrachten tot nu toe door overgeslagen pagina's.
lob_logical_read_count bigint Aantal LOB-logische lezingen tot nu toe.
lob_physical_read_count bigint Aantal fysieke lezingen van LOB tot nu toe.
lob_read_ahead_count bigint Aantal LOB-voorlezen tot nu toe.
segment_read_count int Aantal segment-readheads tot nu toe.
segment_skip_count int Aantal segmenten tot nu toe overgeslagen.
actual_read_row_count bigint Aantal rijen dat door een operator werd gelezen voordat het residuele predicaat werd toegepast.
estimated_read_row_count bigint Van toepassing op: Beginnend met SQL Server 2016 (13.x) SP1.
Aantal rijen dat door een operator werd geschat voordat het residuele predicaat werd toegepast.

Algemene opmerkingen

Als de queryplan-node geen I/O heeft, worden alle I/O-gerelateerde tellers op NULL gezet.

De I/O-gerelateerde tellers die door deze DMV worden gerapporteerd, zijn gedetailleerder dan de tellers die door deze op SET STATISTICS IO de volgende twee manieren worden gerapporteerd:

  • SET STATISTICS IO groepeert de tellers voor alle I/O naar een gegeven tabel. Met deze DMV krijg je aparte tellers voor elke node in het queryplan die I/O naar de tabel uitvoert.

  • Als er een parallelle scan is, rapporteert deze DMV tellers voor elk van de parallelle threads die aan de scan werken.

Vanaf SQL Server 2016 (13.x) SP1 bestaat de standaard query execution statistics profiling infrastructure naast een lichtgewicht query execution statistics profiling infrastructure. SET STATISTICS XML ON en SET STATISTICS PROFILE ON gebruik altijd de standaard infrastructuur voor het profileren van query-uitvoeringsstatistieken. Om sys.dm_exec_query_profiles ingevuld te worden, moet een van de queryprofielinfrastructuren ingeschakeld zijn. Voor meer informatie, zie Infrastructuur voor queryprofilering.

Opmerking

De te onderzoeken query moet starten nadat de queryprofielinfrastructuur is ingeschakeld; het inschakelen ervan nadat de query is gestart zal geen resultaten opleveren in sys.dm_exec_query_profiles. Voor meer informatie over hoe je de queryprofielinfrastructuren kunt inschakelen, zie Query Profiling Infrastructure.

Permissions

  • Op SQL Server en Azure SQL Managed Instance vereist VIEW DATABASE STATE toestemming en lidmaatschap van de db_owner databaserol.
  • Op Azure SQL Database Premium Tiers vereist de VIEW DATABASE STATE toestemming in de database.
  • Op Azure SQL Database Basic, S0 en S1 servicedoelstellingen, en voor databases in elastic pools, is het serverbeheeraccount of het Microsoft Entra-beheerdersaccount vereist. Voor alle andere doelstellingen van SQL Database-diensten is de VIEW DATABASE STATE toestemming vereist in de database.

Machtigingen voor SQL Server 2022 en hoger

Hiervoor is de machtiging VIEW DATABASE PERFORMANCE STATE vereist voor de database.

Voorbeelden

Stap 1: Log in op een sessie waarin je van plan bent de query uit te voeren waarmee sys.dm_exec_query_profilesje gaat analyseren. Om de query voor profilering te configureren, gebruik SET STATISTICS PROFILE ON. Voer je query in dezezelfde sessie uit.

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

Stap 2: Log in op een tweede sessie die anders is dan de sessie waarin je query draait.

De volgende verklaring vat de voortgang samen die de query die momenteel draait in sessie 54 is geboekt. Om dit te doen, berekent het het totale aantal uitvoerrijen van alle threads voor elke knoop en vergelijkt dit met het geschatte aantal uitvoerrijen voor die knoop.

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

Zie ook

dynamische beheerweergaven en -functies (Transact-SQL)
uitvoeringsgerelateerde dynamische beheerweergaven en -functies (Transact-SQL)