sys.dm_exec_requests (Transact-SQL)
Gilt für:SQL Server
Azure SQL-Datenbank
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Endpunkt in Microsoft Fabric
Warehouse in Microsoft Fabric
Gibt Informationen über jede einzelne Anforderung zurück, die in SQL Server ausgeführt wird. Weitere Informationen zu Anforderungen finden Sie im Handbuch zur Thread- und Taskarchitektur.
Hinweis
Informationen zum Aufrufen aus dem dedizierten SQL-Pool in Azure Synapse Analytics oder Analytics Platform System (PDW) finden Sie unter sys.dm_pdw_exec_requests (Transact-SQL). Verwenden Sie sys.dm_exec_requests
für serverlose SQL-Pools oder Microsoft Fabric.
Spaltenname | Datentyp | BESCHREIBUNG |
---|---|---|
session_id | smallint | ID der Sitzung, auf die sich diese Anforderung bezieht. Lässt keine NULL-Werte zu. |
request_id | int | ID der Anforderung. Ist im Kontext der Sitzung eindeutig. Lässt keine NULL-Werte zu. |
start_time | datetime | Der Zeitstempel, der angibt, wann die Anforderung eingetroffen ist. Lässt keine NULL-Werte zu. |
status | nvarchar(30) | Status der Anforderung. Folgenden Werte sind möglich: background rollback „Wird ausgeführt“ runnable sleeping Angehalten Lässt keine NULL-Werte zu. |
command | nvarchar(32) | Identifiziert den aktuellen Typ des Befehls, der gerade verarbeitet wird. Gängige Befehlstypen sind u. a. die folgenden: SELECT INSERT UPDATE Delete BACKUP LOG BACKUP DATABASE DBCC FOR Der Text der Anforderung kann mit sys.dm_exec_sql_text mit dem entsprechenden sql_handle für die Anforderung abgerufen werden. Interne Systemprozesse legen den Befehl je nach Typ des ausgeführten Tasks fest. Mögliche Tasks sind u. a. die folgenden:LOCK MONITOR CHECKPOINTLAZY WRITER Lässt keine NULL-Werte zu. |
sql_handle | varbinary(64) | Ein Token, das den Batch oder die gespeicherte Prozedur, zu dem bzw. der die Abfrage gehört, eindeutig identifiziert. NULL-Werte sind zulässig. |
statement_start_offset | int | Gibt in Bytes die Startposition der aktuell ausgeführten Anweisung für den aktuell ausgeführten Batch oder das beibehaltene Objekt an, beginnend mit 0. Kann zusammen mit sql_handle , statement_end_offset und der dynamischen Verwaltungsfunktion sys.dm_exec_sql_text zum Abrufen der aktuell ausgeführten Anweisung für die Anforderung verwendet werden. NULL-Werte sind zulässig. |
statement_end_offset | int | Gibt in Bytes die Endposition der aktuell ausgeführten Anweisung für den aktuell ausgeführten Batch oder das beibehaltene Objekt an, beginnend mit 0. Kann zusammen mit sql_handle , statement_start_offset und der dynamischen Verwaltungsfunktion sys.dm_exec_sql_text zum Abrufen der aktuell ausgeführten Anweisung für die Anforderung verwendet werden. NULL-Werte sind zulässig. |
plan_handle | varbinary(64) | Ist ein Token, das einen Abfrageausführungsplan für einen aktuell ausgeführten Batch eindeutig identifiziert. NULL-Werte sind zulässig. |
database_id | smallint | ID der Datenbank, für die die Anforderung ausgeführt wird. Lässt keine NULL-Werte zu. |
user_id | int | ID des Benutzers, der die Anforderung gesendet hat. Lässt keine NULL-Werte zu. |
connection_id | uniqueidentifier | ID der Verbindung, über die die Anforderung eingetroffen ist. NULL-Werte sind zulässig. |
blocking_session_id | smallint | ID der Sitzung, die die Anforderung blockiert. Wenn diese Spalte NULL oder gleich 0 ist, wird die Anforderung nicht blockiert oder die Sitzungsinformationen der blockierenden Sitzung sind nicht verfügbar (oder können nicht identifiziert werden). Weitere Informationen finden Sie unter Verstehen und Beheben von Problemen durch Blockierungen in SQL-Server. -2 = Der Besitzer der blockierenden Ressource ist eine verwaiste verteilte Transaktion. -3 = Der Besitzer der blockierenden Ressource ist eine verzögerte Wiederherstellungstransaktion. -4 = Die Sitzungs-ID des Besitzers des blockierenden Latches konnte zu diesem Zeitpunkt aufgrund von internen Latchstatusübergängen nicht bestimmt werden. -5 = Die Sitzungs-ID des Besitzers des blockierenden Latchs konnte nicht ermittelt werden, da sie für diesen Latchtyp (z. B. für einen SH-Latch) nicht nachverfolgt wird. „blocking_session_id -5“ allein weist nicht auf ein Leistungsproblem hin. „-5“ ist ein Hinweis darauf, dass die Sitzung auf den Abschluss einer asynchronen Aktion wartet. Vor der Einführung von „-5“ hätte dieselbe Sitzung die blocking_session_id 0 angezeigt, auch wenn sie sich noch im Wartezustand befunden hätte. Je nach Arbeitsauslastung kann der Wert „-5“ für die blocking_session_id häufig vorkommen. |
wait_type | nvarchar(60) | Wenn die Anforderung zurzeit blockiert wird, gibt diese Spalte den Wartetyp zurück. NULL-Werte sind zulässig. Informationen zu Wartetypen finden Sie unter sys.dm_os_wait_stats (Transact-SQL). |
wait_time | int | Wenn die Anforderung zurzeit blockiert wird, gibt diese Spalte die Dauer des aktuellen Wartevorgangs in Millisekunden an. Lässt keine NULL-Werte zu. |
last_wait_type | nvarchar(60) | Wenn diese Anforderung zuvor bereits blockiert war, gibt diese Spalte den Typ des letzten Wartevorgangs zurück. Lässt keine NULL-Werte zu. |
wait_resource | nvarchar(256) | Wenn die Anforderung zurzeit blockiert wird, gibt diese Spalte die Ressource zurück, auf die die Anforderung zurzeit wartet. Lässt keine NULL-Werte zu. |
open_transaction_count | int | Anzahl der für die Anforderung offenen Transaktionen. Lässt keine NULL-Werte zu. |
open_resultset_count | int | Anzahl der für die Anforderung offenen Resultsets. Lässt keine NULL-Werte zu. |
transaction_id | bigint | ID der Transaktion, in der diese Anforderung ausgeführt wird. Lässt keine NULL-Werte zu. |
context_info | varbinary(128) | CONTEXT_INFO-Wert der Sitzung. NULL-Werte sind zulässig. |
percent_complete | real | Prozentsatz der für die folgenden Befehle durchgeführten Arbeit: ALTER INDEX REORGANIZE AUTO_SHRINK-Option mit ALTER DATABASE BACKUP DATABASE DBCC CHECKDB DBCC CHECKFILEGROUP DBCC CHECKTABLE DBCC INDEXDEFRAG DBCC SHRINKDATABASE DBCC SHRINKFILE RECOVERY RESTORE DATABASE ROLLBACK TDE ENCRYPTION Lässt keine NULL-Werte zu. |
estimated_completion_time | bigint | Nur intern. Lässt keine NULL-Werte zu. |
cpu_time | int | Von der Anforderung beanspruchte CPU-Zeit (in Millisekunden). Lässt keine NULL-Werte zu. |
total_elapsed_time | int | Gesamtzeit seit dem Eintreffen der Anforderung (in Millisekunden). Lässt keine NULL-Werte zu. |
scheduler_id | int | ID des Zeitplanungsmoduls, das diese Anforderung plant. NULL-Werte sind zulässig. |
task_address | varbinary(8) | Speicheradresse, die dem Task für diese Anforderung zugeordnet ist. NULL-Werte sind zulässig. |
Lesevorgänge | bigint | Anzahl der von dieser Anforderung ausgeführten Lesevorgänge. Lässt keine NULL-Werte zu. |
Schreibvorgänge | bigint | Anzahl der von dieser Anforderung ausgeführten Schreibvorgänge. Lässt keine NULL-Werte zu. |
logical_reads | bigint | Anzahl der von dieser Anforderung ausgeführten logischen Lesevorgänge. Lässt keine NULL-Werte zu. |
text_size | int | TEXTSIZE-Einstellung für diese Anforderung. Lässt keine NULL-Werte zu. |
language | nvarchar(128) | Spracheinstellung für die Anforderung. NULL-Werte sind zulässig. |
date_format | nvarchar(3) | DATEFORMAT-Einstellung für die Anforderung. NULL-Werte sind zulässig. |
date_first | smallint | DATEFIRST-Einstellung für die Anforderung. Lässt keine NULL-Werte zu. |
quoted_identifier | bit | 1 = QUOTED_IDENTIFIER ist ON für die Anforderung. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
arithabort | bit | 1 = ARITHABORT ist für die Anforderung auf ON festgelegt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
ansi_null_dflt_on | bit | 1 = ANSI_NULL_DFLT_ON ist für die Anforderung auf ON festgelegt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
ansi_defaults | bit | 1 = ANSI_DEFAULTS ist für die Anforderung auf ON festgelegt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
ansi_warnings | bit | 1 = ANSI_WARNINGS ist für die Anforderung auf ON festgelegt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
ansi_padding | bit | 1 = ANSI_PADDING ist für die Anforderung auf ON festgelegt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
ansi_nulls | bit | 1 = ANSI_NULLS ist für die Anforderung auf ON festgelegt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
concat_null_yields_null | bit | 1 = CONCAT_NULL_YIELDS_NULL ist für die Anforderung auf ON festgelegt. Andernfalls ist der Wert 0. Lässt keine NULL-Werte zu. |
transaction_isolation_level | smallint | Isolationsstufe, mit der die Transaktion für diese Anforderung erstellt wird. Lässt keine NULL-Werte zu. 0 = Unspecified 1 = ReadUncomitted 2 = ReadCommitted 3 = Repeatable 4 = Serializable 5 = Momentaufnahme |
lock_timeout | int | Sperrtimeout für diese Anforderung (in Millisekunden). Lässt keine NULL-Werte zu. |
deadlock_priority | int | DEADLOCK_PRIORITY-Einstellung für die Anforderung. Lässt keine NULL-Werte zu. |
row_count | bigint | Anzahl von Zeilen, die von dieser Anforderung an den Client zurückgegeben wurden. Lässt keine NULL-Werte zu. |
prev_error | int | Letzter Fehler, der während der Ausführung der Anforderung aufgetreten ist. Lässt keine NULL-Werte zu. |
nest_level | int | Aktuelle Schachtelungsebene von Code, der für die Anforderung ausgeführt wird. Lässt keine NULL-Werte zu. |
granted_query_memory | int | Anzahl von Seiten, die der Ausführung einer Abfrage in der Anforderung zugeordnet sind. Lässt keine NULL-Werte zu. |
executing_managed_code | bit | Gibt an, ob eine bestimmte Anforderung zurzeit CLR-Objekte (Common Language Runtime) ausführt, z. B. Routinen, Typen und Trigger. Die Festlegung gilt für die gesamte Zeit, die sich ein CLR-Objekt im Stapel befindet, selbst wenn Transact-SQL aus der CLR heraus ausgeführt wird. Lässt keine NULL-Werte zu. |
group_id | int | ID der Arbeitsauslastungsgruppe, zu der diese Abfrage gehört. Lässt keine NULL-Werte zu. |
query_hash | binary(8) | Binärer Hashwert, der in der Abfrage berechnet wird und zum Identifizieren von Abfragen mit ähnlicher Logik verwendet wird. Sie können den Abfragehash verwenden, um die aggregierte Ressourcennutzung für Abfragen zu ermitteln, die sich nur durch Literalwerte unterscheiden. |
query_plan_hash | binary(8) | Binärer Hashwert, der im Abfrageausführungsplan wird und zum Identifizieren ähnlicher Abfrageausführungspläne verwendet wird. Sie können diesen Abfrageplan-Hashwert verwenden, um die kumulierten Kosten für Abfragen mit ähnlichen Ausführungsplänen zu suchen. |
statement_sql_handle | varbinary(64) | Gilt für: SQL Server 2014 (12.x) und höher. SQL-Handle der einzelnen Abfrage. Diese Spalte ist NULL, wenn der Abfragespeicher für die Datenbank nicht aktiviert ist. |
statement_context_id | bigint | Gilt für: SQL Server 2014 (12.x) und höher. Der optionale Fremdschlüssel für sys.query_context_settings .Diese Spalte ist NULL, wenn der Abfragespeicher für die Datenbank nicht aktiviert ist. |
dop | int | Gilt für: SQL Server 2016 (13.x) und höher. Der Grad an Parallelität der Abfrage. |
parallel_worker_count | int | Gilt für: SQL Server 2016 (13.x) und höher. Die Anzahl reservierter paralleler Worker, wenn es sich um eine parallele Abfrage handelt. |
external_script_request_id | uniqueidentifier | Gilt für: SQL Server 2016 (13.x) und höher. Die externe Skriptanforderungs-ID, die der aktuellen Anforderung zugeordnet ist. |
is_resumable | bit | Gilt für: SQL Server 2017 (14.x) und höher Gibt an, ob die Anforderung ein auflösbarer Indexvorgang ist. |
page_resource | binary(8) | Gilt für: SQL Server 2019 (15.x) Eine Hexadezimaldarstellung der Seitenressource mit 8 Byte, wenn die Spalte wait_resource eine Seite enthält. Weitere Informationen finden Sie unter sys.fn_PageResCracker. |
page_server_reads | bigint | Gilt für: Azure SQL-Datenbank Hyperscale Die Anzahl von Seitenserverlesevorgängen, die von dieser Anforderung ausgeführt werden. Lässt keine NULL-Werte zu. |
Bemerkungen
Für die Ausführung von Code außerhalb von SQL Server (z. B. erweiterte gespeicherte Prozeduren und verteilte Abfragen) muss ein Thread außerhalb der Steuerung des nicht präemptiven Zeitplanungsmoduls ausgeführt werden. Dazu wechselt ein Arbeitsthread in den präemptiven Modus. Zeitwerte, die von dieser dynamischen Verwaltungssicht zurückgegeben werden, schließen nicht die im präemptiven Modus verbrachte Zeit ein.
Beim Ausführen von parallelen Anforderungen im Zeilenmodus weist SQL Server einen Arbeitsthread zu, um die Arbeitsthreads zu koordinieren, die für das Abschließen der ihnen zugewiesenen Tasks zuständig sind. In dieser dynamischen Verwaltungssicht ist nur der Koordinatorthread für die Anforderung sichtbar. Die Spalten reads
, writes
, logical_reads
und row_count
werden für den Koordinatorthread nicht aktualisiert. Die Spalten wait_type
, wait_time
, last_wait_type
, wait_resource
und granted_query_memory
werden für den Koordinatorthread nur aktualisiert. Weitere Informationen finden Sie im Handbuch zur Thread- und Taskarchitektur.
Berechtigungen
Wenn Benutzer die Berechtigung VIEW SERVER STATE
auf dem Server besitzen, können sie alle zurzeit ausgeführten Sitzungen in der Instanz von SQL Server anzeigen; andernfalls wird den Benutzern nur die aktuelle Sitzung angezeigt. VIEW SERVER STATE
kann in Azure SQL-Datenbank nicht gewährt werden, daher ist sys.dm_exec_requests
immer auf die aktuelle Verbindung beschränkt.
Wenn das sekundäre Replikat in Szenarien mit Verfügbarkeitsgruppen auf nur Leseabsicht festgelegt ist, muss die Verbindung mit dem sekundären Replikat ihre Anwendungsabsicht durch Hinzufügen von applicationintent=readonly
in Parametern für die Verbindungszeichenfolge angeben. Andernfalls ist die Zugriffsüberprüfung für sys.dm_exec_requests
für Datenbanken in der Verfügbarkeitsgruppe nicht erfolgreich, auch wenn die Berechtigung VIEW SERVER STATE
vorhanden ist.
In SQL Server 2022 (16.x) und höheren Versionen erfordert sys.dm_exec_requests
die Berechtigung VIEW SERVER PERFORMANCE STATE auf dem Server.
Beispiele
A. Suchen nach dem Abfragetext für einen ausgeführten Batch
Im folgenden Beispiel werden sys.dm_exec_requests
abgefragt, um die entsprechende Abfrage zu suchen und den sql_handle
-Wert aus der Ausgabe zu kopieren.
SELECT * FROM sys.dm_exec_requests;
GO
Verwenden Sie dann zum Abrufen des Anweisungstexts den kopierten sql_handle
-Wert mit der Systemfunktion sys.dm_exec_sql_text(sql_handle)
.
SELECT * FROM sys.dm_exec_sql_text(< copied sql_handle >);
GO
B. Suchen nach allen Sperren, die ein ausgeführter Batch enthält
Das folgende Beispiel fragt sys.dm_exec_requests
ab, um den entsprechende Batch zu suchen und die transaction_id
aus der Ausgabe zu kopieren.
SELECT * FROM sys.dm_exec_requests;
GO
Verwenden Sie zum Suchen von Sperrinformationen die kopierte transaction_id
mit der Systemfunktion sys.dm_tran_locks
.
SELECT * FROM sys.dm_tran_locks
WHERE request_owner_type = N'TRANSACTION'
AND request_owner_id = < copied transaction_id >;
GO
C. Suchen nach allen zurzeit blockierten Anforderungen
Das folgende Beispiel fragt sys.dm_exec_requests
ab, um Informationen zu blockierten Anforderungen zu suchen.
SELECT session_id,
status,
blocking_session_id,
wait_type,
wait_time,
wait_resource,
transaction_id
FROM sys.dm_exec_requests
WHERE status = N'suspended';
GO
D: Sortieren vorhandener Anforderungen nach CPU
SELECT
[req].[session_id],
[req].[start_time],
[req].[cpu_time] AS [cpu_time_ms],
OBJECT_NAME([ST].[objectid], [ST].[dbid]) AS [ObjectName],
SUBSTRING(
REPLACE(
REPLACE(
SUBSTRING(
[ST].[text], ([req].[statement_start_offset] / 2) + 1,
((CASE [req].[statement_end_offset]
WHEN -1 THEN DATALENGTH([ST].[text])
ELSE [req].[statement_end_offset]
END - [req].[statement_start_offset]
) / 2
) + 1
), CHAR(10), ' '
), CHAR(13), ' '
), 1, 512
) AS [statement_text]
FROM
[sys].[dm_exec_requests] AS [req]
CROSS APPLY [sys].dm_exec_sql_text([req].[sql_handle]) AS [ST]
ORDER BY
[req].[cpu_time] DESC;
GO
Siehe auch
- Dynamische Systemverwaltungssichten
- Dynamische Verwaltungssichten und -funktionen im Zusammenhang mit der Ausführung
- sys.dm_os_memory_clerks
- sys.dm_os_sys_info
- sys.dm_exec_query_memory_grants
- sys.dm_exec_query_plan
- sys.dm_exec_sql_text
- SQL Server, SQL-Statistik (Objekt)
- Handbuch zur Architektur der Abfrageverarbeitung
- Handbuch zur Thread- und Taskarchitektur