Share via


sys.dm_exec_cursors (Transact-SQL)

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

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version).

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.

Eigenschaften

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 sql_handle, statement_end_offset und der dynamischen Verwaltungsfunktion sys.dm_exec_sql_text zum Abrufen der zurzeit ausgeführten Anweisung für die Anforderung verwendet werden.

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_offset und 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.

reads

bigint

Anzahl von Lesevorgängen, die der Cursor ausgeführt hat.

writes

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.

Hinweise

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.

Typ

Beschreibung

Keyset

Cursor wurde als Keyset deklariert.

Dynamic

Cursor wurde als dynamisch deklariert.

Momentaufnahme

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

Read Only

Cursor wurde als schreibgeschützt deklariert.

Scroll Locks

Cursor verwendet Scrollsperren.

Optimistic

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.

Bereich

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 Gültigkeitsbereich 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

Siehe auch

Verweis

Dynamische Verwaltungssichten und Funktionen (Transact-SQL)

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

sys.dm_exec_sessions (Transact-SQL)