sys.dm_exec_cursors (Transact-SQL)

Gilt für:SQL Server

Gibt Informationen über die Cursor zurück, die in verschiedenen Datenbanken geöffnet sind.

Syntax

  
dm_exec_cursors (session_id | 0 )  

Argumente

session_id | 0
ID der Sitzung. Wenn session_id angegeben wird, gibt diese Funktion Informationen zu Cursorn in der angegebenen Sitzung zurück.

Wenn 0 angegeben wird, gibt diese Funktion Informationen zu allen Cursorn für alle Sitzungen zurück.

Zurückgegebene Tabelle

Spaltenname Datentyp BESCHREIBUNG
session_id int ID der Sitzung, die diesen Cursor enthält.
cursor_id int ID des Cursorobjekts.
name nvarchar(256) Name des Cursors gemäß der Definition durch den Benutzer.
properties nvarchar(256) Gibt die Eigenschaften des Cursors an. Die Werte der folgenden Eigenschaften werden zu einem Wert dieser Spalte verkettet:
Deklarationsschnittstelle
Cursortyp
Cursorparallelität
Cursorbereich
Cursorschachtelungsebene

Beispielsweise kann der in dieser Spalte zurückgegebene Wert "TSQL | Dynamic | Optimistic | Global (0)" lauten.
sql_handle varbinary(64) Handle zum Text des Batches, durch den der Cursor deklariert wurde.
statement_start_offset int Anzahl von Zeichen im derzeit ausgeführten Batch oder in der derzeit ausgeführten gespeicherten Prozedur, an der die derzeit ausgeführte Anweisung beginnt. Kann zusammen mit dem sql_handle, dem statement_end_offset und der dynamischen Verwaltungsfunktion sys.dm_exec_sql_text verwendet werden, um die aktuell ausgeführte Anweisung für die Anforderung abzurufen.
statement_end_offset int Anzahl von Zeichen im derzeit ausgeführten Batch oder in der derzeit ausgeführten gespeicherten Prozedur, an der die derzeit ausgeführte Anweisung endet. Kann zusammen mit sql_handle, statement_start_offsetund der dynamischen Verwaltungsfunktion sys.dm_exec_sql_text zum Abrufen der zurzeit ausgeführten Anweisung für die Anforderung verwendet werden.
plan_generation_num bigint Eine Sequenznummer, anhand der nach einer Neukompilierung zwischen einzelnen Instanzen von Plänen unterschieden werden kann.
creation_time datetime Der Timestamp, wann dieser Cursor erstellt wurde.
is_open bit Gibt an, ob der Cursor geöffnet ist.
is_async_population bit Gibt an, ob der Hintergrundthread weiterhin einen KEYSET- oder STATIC-Cursor asynchron auffüllt.
is_close_on_commit bit Gibt an, ob der Cursor mithilfe von CURSOR_CLOSE_ON_COMMIT deklariert wurde.

1 = Cursor wird geschlossen, wenn die Transaktion endet.
Fetch_status int Gibt den letzten Abrufstatus des Cursors zurück. Dies ist der letzte zurückgegebene @@FETCH_STATUS-Wert.
fetch_buffer_size int Gibt Informationen zur Größe des Fetchpuffers zurück.

1 = Transact-SQL-Cursor. Für API-Cursor kann ein höherer Wert festgelegt werden.
fetch_buffer_start int Für FAST_FORWARD- und DYNAMIC-Cursor wird 0 zurückgegeben, falls der Cursor nicht geöffnet ist oder falls er vor der ersten Zeile positioniert ist. Andernfalls wird –1 zurückgegeben.

Für STATIC- und KEYSET-Cursor wird 0 zurückgegeben, falls der Cursor nicht geöffnet ist, und -1, falls der Cursor nach der letzten Zeile positioniert ist.

Andernfalls wird die Zeilennummer zurückgegeben, in der der Cursor positioniert ist.
ansi_position int Cursorposition innerhalb des Fetchpuffers.
worker_time bigint Der Zeitaufwand in Mikrosekunden zum Ausführen dieses Cursors durch den Arbeitsthread.
Lesevorgänge bigint Anzahl von Lesevorgängen, die der Cursor ausgeführt hat.
Schreibvorgänge bigint Anzahl von Schreibvorgängen, die der Cursor ausgeführt hat.
dormant_duration bigint Millisekunden seit dem Start der letzten Abfrage (Öffnen oder Abrufen) für diesen Cursor.

Berechtigungen

Erfordert die VIEW SERVER STATE-Berechtigung auf dem Server.

Berechtigungen für SQL Server 2022 und höher

Erfordert die VIEW SERVER PERFORMANCE STATE-Berechtigung auf dem Server.

Bemerkungen

Die folgende Tabelle stellt Informationen zur Cursordeklarationsschnittstelle bereit und enthält die möglichen Werte für die Eigenschaftenspalte.

Eigenschaft Beschreibung
API Cursor wurde mithilfe einer der Datenzugriffs-APIs (ODBC, OLE DB) deklariert.
TSQL Cursor wurde mithilfe der DECLARE CURSOR-Syntax von Transact-SQL deklariert.

Die folgende Tabelle stellt Informationen zum Cursortyp bereit und enthält die möglichen Werte für die Eigenschaftenspalte.

type BESCHREIBUNG
Keyset Cursor wurde als Keyset deklariert.
Dynamisch Cursor wurde als dynamisch deklariert.
Snapshot Cursor wurde als Momentaufnahme oder statisch deklariert.
Fast_Forward Cursor wurde als Vorwärtscursor deklariert.

Die folgende Tabelle stellt Informationen zur Cursorparallelität bereit und enthält die möglichen Werte für die Eigenschaftenspalte.

Parallelität Beschreibung
Nur Leseberechtigung Cursor wurde als schreibgeschützt deklariert.
Scroll Locks Cursor verwendet Scrollsperren.
Optimistisch Cursor verwendet die Steuerung durch vollständige Parallelität.

Die folgende Tabelle stellt Informationen zum Cursorbereich bereit und enthält die möglichen Werte für die Eigenschaftenspalte.

`Scope` BESCHREIBUNG
Lokal Gibt an, dass der Gültigkeitsbereich des Cursors lokal zu dem Batch, der gespeicherten Prozedur oder dem Trigger ist, in dem bzw. in der er erstellt wurde.
Global Gibt an, dass der Bereich des Cursors global zur Verbindung ist.

Beispiele

A. Erkennen von alten Cursorn

Dieses Beispiel gibt Informationen zu Cursorn zurück, die auf dem Server länger als über den angegebenen Zeitraum von 36 Stunden hinweg geöffnet waren.

SELECT creation_time, cursor_id, name, c.session_id, login_name   
FROM sys.dm_exec_cursors(0) AS c   
JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id   
WHERE DATEDIFF(hh, c.creation_time, GETDATE()) > 36;  
GO  

Weitere Informationen

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