sys.dm_exec_requests (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-Endpunkt in Microsoft FabricWarehouse 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 mithilfe sys.dm_exec_sql_text der entsprechenden sql_handle 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.

In Azure SQL-Datenbank sind die Werte innerhalb einer einzelnen Datenbank oder eines elastischen Pools eindeutig, aber nicht innerhalb eines logischen Servers.
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. Ist diese Spalte oder NULL0, wird die Anforderung nicht blockiert, oder die Sitzungsinformationen der Blockierungssitzung 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 = session_id der Blockierungshalter konnte zu diesem Zeitpunkt aufgrund von internen Sperreszustandsübergängen nicht bestimmt werden.

-5 = session_id der Blockierungshalter konnte nicht bestimmt werden, da er für diesen Latch-Typ nicht nachverfolgt wird (z. B. für einen SH-Riegel).

blocking_session_id-5 Allein weist nicht auf ein Leistungsproblem hin. -5 ist ein Hinweis darauf, dass die Sitzung auf eine asynchrone Aktion wartet, bis sie abgeschlossen ist. Vor -5 der Einführung hätte die gleiche Sitzung angezeigt blocking_session_id0, obwohl sie sich noch in einem Wartezustand befand.

Abhängig von der Arbeitsauslastung kann es sich bei der Beobachtung blocking_session_id = -5 um ein häufiges Vorkommen handeln.
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.
reads bigint Anzahl der von dieser Anforderung ausgeführten Lesevorgänge. Lässt keine NULL-Werte zu.
writes 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.
dist_statement_id uniqueidentifier Gilt für: SQL Server 2022 und höhere Versionen, Azure SQL-Datenbank, Azure SQL verwaltete Instanz, Azure Synapse Analytics (nur serverlose Pools) und Microsoft Fabric

Eindeutige ID für die Anweisung für die übermittelte Anforderung. Lässt keine NULL-Werte zu.

Hinweise

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.

Die wait_resource Spalte enthält ähnliche Informationen wie resource_description in sys.dm_tran_locks (Transact-SQL), ist aber anders formatiert.

Berechtigungen

Wenn der Benutzer über die Berechtigung auf dem Server verfügt VIEW SERVER STATE , sieht der Benutzer alle ausgeführten Sitzungen in der Instanz von SQL Server. Andernfalls sieht der Benutzer nur die aktuelle Sitzung. 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 Verfügbarkeitsgruppenszenarien schreibgeschützt festgelegt ist, muss die Verbindung mit der sekundären Datei die Anwendungsabsicht in Verbindungszeichenfolge Parametern durch Hinzufügen applicationintent=readonlyangeben. Andernfalls wird die Zugriffsüberprüfung sys.dm_exec_requests für Datenbanken in der Verfügbarkeitsgruppe nicht übergeben, auch wenn VIEW SERVER STATE die Berechtigung vorhanden ist.

Für SQL Server 2022 (16.x) und höhere Versionen sys.dm_exec_requests ist die BERECHTIGUNG VIEW SERVER PERFORMANCE STATE auf dem Server erforderlich.

Beispiele

.A Suchen des Abfragetexts 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 aller Sperren, die ein ausgeführter Batch hä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 aller aktuell 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