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 Der in dieser Spalte zurückgegebene Wert kann z. B. "TSQL | Dynamisch | Optimistisch | Global (0)". |
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_offsetund 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_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. |
liest | bigint | Anzahl von Lesevorgängen, die der Cursor ausgeführt hat. |
schreibt | 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.
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. |
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)