Teilen über


sys.dm_exec_query_profiles (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL verwaltete Instanz

Überwacht den Abfragestatus einer ausgeführten Abfrage in Echtzeit. Verwenden Sie beispielsweise diese DMV, um zu ermitteln, welcher Teil der Abfrage langsam ausgeführt wird. Verknüpfen Sie diese DMV mit anderen System-DMVs, indem Sie die im Beschreibungsfeld angegebenen Spalten verwenden. Sie können diese DMV aber auch mit anderen Leistungsindikatoren (z. B. Systemmonitor, xperf) verknüpfen, indem Sie die timestamp-Spalten verwenden.

Zurückgegebene Tabelle

Die zurückgegebenen Leistungsindikatoren gelten pro Operator und pro Thread. Die Ergebnisse sind dynamisch und stimmen nicht mit den Ergebnissen vorhandener Optionen überein, z SET STATISTICS XML ON . B. die ausgabe nur nach Abschluss der Abfrage erstellen.

Spaltenname Datentyp BESCHREIBUNG
session_id smallint Identifiziert die Sitzung, in der die Abfrage ausgeführt wird. Verweist auf dm_exec_sessions.session_id.
request_id int Identifiziert die Zielanforderung. Verweist auf dm_exec_sessions.request_id.
sql_handle varbinary(64) Ein Token, das den Batch oder die gespeicherte Prozedur, zu dem bzw. der die Abfrage gehört, eindeutig identifiziert. Verweist auf dm_exec_query_stats.sql_handle.
plan_handle varbinary(64) Ein Token, das einen Abfrageausführungsplan für einen Batch eindeutig identifiziert, der ausgeführt wurde und dessen Plan sich im Plancache befindet, oder der derzeit ausgeführt wird. Verweise dm_exec_query_stats.plan_handle.
physical_operator_name nvarchar(256) Der Name des physischen Operators.
node_id int Identifiziert einen Operatorknoten in der Abfragestruktur.
thread_id int Unterscheidet die Threads (für eine parallele Abfrage), die zu demselben Abfrageoperatorknoten gehören.
task_address varbinary(8) Identifiziert den SQLOS-Task, den dieser Thread verwendet. Verweist auf dm_os_tasks.task_address.
row_count bigint Anzahl der bisher vom Operator zurückgegebenen Zeilen.
rewind_count bigint Anzahl der bisherigen Zurückspulvorgänge.
rebind_count bigint Anzahl der bisherigen erneuten Bindungen.
end_of_scan_count bigint Anzahl der bisherigen Scanenden.
estimate_row_count bigint Geschätzte Anzahl von Zeilen. Es kann nützlich sein, "estimated_row_count" mit dem tatsächlichen "row_count" zu vergleichen.
first_active_time bigint Die Zeit in Millisekunden, zu der der Operator zuerst aufgerufen wurde.
last_active_time bigint Die Zeit in Millisekunden, zu der der Operator zuletzt aufgerufen wurde.
open_time bigint Zeitstempel beim Öffnen (in Millisekunden).
first_row_time bigint Zeitstempel beim Öffnen der ersten Zeile (in Millisekunden).
last_row_time bigint Zeitstempel beim Öffnen der letzten Zeile (in Millisekunden).
close_time bigint Zeitstempel beim Schließen (in Millisekunden).
elapsed_time_ms bigint Verstrichene Gesamtzeit (in Millisekunden), die bisher von den Vorgängen des Zielknotens verwendet wird.
cpu_time_ms bigint Die gesamte CPU-Zeit (in Millisekunden) wird bisher von den Vorgängen des Zielknotens verwendet.
database_id smallint ID der Datenbank, die das Objekt enthält, für das die Lese- und Schreibvorgänge ausgeführt werden.
object_id int Der Bezeichner für das Objekt, für das die Lese- und Schreibvorgänge ausgeführt werden. Verweist auf "sys.objects.object_id".
index_id int Der Index (sofern vorhanden), für den das Rowset geöffnet wird.
scan_count bigint Anzahl der bisherigen Tabellen-/Indexscans.
logical_read_count bigint Anzahl der bisherigen logischen Lesevorgänge.
physical_read_count bigint Anzahl der bisherigen physischen Lesevorgänge.
read_ahead_count bigint Anzahl der bisherigen Read-Ahead-Lesevorgänge.
write_page_count bigint Anzahl der bisherigen page-writes-Schreibvorgänge aufgrund eines Überlaufs.
lob_logical_read_count bigint Anzahl der bisherigen logischen LOB-Lesevorgänge.
lob_physical_read_count bigint Anzahl der bisherigen physischen LOB-Lesevorgänge.
lob_read_ahead_count bigint Anzahl der bisherigen Read-Ahead-LOB-Lesevorgänge.
segment_read_count int Anzahl der bisherigen Segment-Read-Ahead-Lesevorgänge.
segment_skip_count int Anzahl der bisher übersprungenen Segmente.
actual_read_row_count bigint Anzahl von Zeilen, die von einem Operator gelesen werden, bevor das Rest-Prädikat angewendet wurde.
estimated_read_row_count bigint Gilt für: Beginnend mit SQL Server 2016 (13.x) SP1.
Die Anzahl der zeilen, die von einem Operator gelesen werden sollen, bevor das Rest-Prädikat angewendet wurde.

Allgemeine Hinweise

Wenn der Abfrageplanknoten keine E/A enthält, werden alle I/O-bezogenen Zähler auf NULL festgelegt.

Die von diesem DMV gemeldeten E/A-Zähler sind präziser als die von den folgenden beiden Methoden gemeldeten SET STATISTICS IO :

  • SET STATISTICS IO gruppiert die Zähler für alle E/A-Vorgänge zu einer bestimmten Tabelle zusammen. Mit diesem DMV erhalten Sie separate Leistungsindikatoren für jeden Knoten im Abfrageplan, der E/A für die Tabelle ausführt.

  • Bei einem parallelen Scan meldet diese DMV Leistungsindikatoren für jeden der parallelen Threads für den Scan.

Ab SQL Server 2016 (13.x) SP1 ist die standardmäßige Profilerstellungsinfrastruktur zur Abfrageausführungsstatistik nebeneinander mit einer einfachen Profilerstellungsinfrastruktur zur Abfrageausführung vorhanden. SET STATISTICS XML ONund SET STATISTICS PROFILE ON immer die standardmäßige Profilerstellungsinfrastruktur für die Abfrageausführung verwenden. Damit sys.dm_exec_query_profiles sie ausgefüllt werden können, muss eine der Abfrageprofilinfrastrukturen aktiviert sein. Weitere Informationen finden Sie unter Profilerstellungsinfrastruktur für Abfragen.

Hinweis

Die abfrage, die untersucht wird, muss gestartet werden , nachdem die Abfrageprofilinfrastruktur aktiviert wurde, nachdem die Abfrage gestartet wurde, führt nicht zu sys.dm_exec_query_profilesErgebnissen. Weitere Informationen zum Aktivieren der Abfrageprofilinfrastrukturen finden Sie unter Query Profiling Infrastructure.

Berechtigungen

  • Für SQL Server und Azure SQL verwaltete Instanz ist die Berechtigung und Mitgliedschaft der db_owner Datenbankrolle erforderlichVIEW DATABASE STATE.
  • Für Azure SQL-Datenbank Premium-Ebenen ist die VIEW DATABASE STATE Berechtigung in der Datenbank erforderlich.
  • Für Azure SQL-Datenbank Standard-, S0- und S1-Dienstziele sowie für Datenbanken in elastischen Pools ist das Serveradministratorkonto oder das Microsoft Entra-Administratorkonto erforderlich. Für alle anderen SQL-Datenbank Dienstziele ist die VIEW DATABASE STATE Berechtigung in der Datenbank erforderlich.

Berechtigungen für SQL Server 2022 und höher

Erfordert DIE BERECHTIGUNG "DATENBANKLEISTUNGSSTATUS ANZEIGEN" für die Datenbank.

Beispiele

Schritt 1: Melden Sie sich bei einer Sitzung an, in der Sie die Abfrage ausführen möchten, mit sys.dm_exec_query_profilesder Sie analysieren möchten. So konfigurieren Sie die Abfrage für die Profilerstellungsverwendung SET STATISTICS PROFILE ON. Führen Sie Ihre Abfrage in derselben Sitzung aus.

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

Schritt 2: Melden Sie sich bei einer zweiten Sitzung an, die sich von der Sitzung unterscheidet, in der Ihre Abfrage ausgeführt wird.

Die folgende Anweisung fasst den Fortschritt der Abfrage zusammen, die derzeit in Sitzung 54 ausgeführt wird. Zu diesem Zweck wird die Gesamtzahl der Ausgabezeilen aller Threads für jeden Knoten berechnet und mit der geschätzten Anzahl an Ausgabezeilen für diesen Knoten verglichen.

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

Weitere Informationen

Dynamische Verwaltungssichten und Funktionen (Transact-SQL)
Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit der Ausführung (Transact-SQL)