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 ON
und 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_profiles
Ergebnissen. 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_profiles
der 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)