Condividi tramite


sys.dm_exec_cursors (Transact-SQL)

Si applica a: SQL Server

Restituisce informazioni sui cursori aperti in vari database.

Sintassi

  
dm_exec_cursors (session_id | 0 )  

Argomenti

session_id | 0
ID della sessione. Se si specifica session_id , questa funzione restituisce informazioni sui cursori nella sessione specificata.

Se viene specificato 0, la funzione restituisce informazioni su tutti i cursori per tutte le sessioni.

Tabella restituita

Nome colonna Tipo di dati Descrizione
session_id int ID della sessione che include il cursore.
cursor_id int ID dell'oggetto cursore.
name nvarchar(256) Nome del cursore definito dall'utente.
properties nvarchar(256) Specifica le proprietà del cursore. I valori delle proprietà seguenti vengono concatenati per comporre il valore di questa colonna:
Interfaccia di dichiarazione
Tipo di cursore
Concorrenza dei cursori
Scopo del cursore
Livello di nidificazione del cursore

Ad esempio, il valore restituito in questa colonna potrebbe essere "TSQL | Dinamico | Ottimistico | Globale (0)".
sql_handle varbinary(64) Handle per il testo del batch che ha dichiarato il cursore.
statement_start_offset int Numero di caratteri nella stored procedure o nel batch attualmente in esecuzione in cui inizia l'istruzione in esecuzione. Può essere usato insieme al sql_handle, al statement_end_offset e alla funzione di gestione dinamica sys.dm_exec_sql_text per recuperare l'istruzione attualmente in esecuzione per la richiesta.
statement_end_offset int Numero di caratteri nella stored procedure o nel batch attualmente in esecuzione in cui termina l'istruzione in esecuzione. Può essere usato insieme al sql_handle, al statement_start_offset e alla funzione di gestione dinamica sys.dm_exec_sql_text per recuperare l'istruzione attualmente in esecuzione per la richiesta.
plan_generation_num bigint Numero di sequenza utilizzabile per distinguere le istanze dei piani dopo la ricompilazione.
creation_time datetime Timestamp relativo alla creazione del cursore.
is_open bit Specifica se il cursore è aperto.
is_async_population bit Specifica se il thread in background sta ancora popolando un cursore KEYSET o STATIC in modo asincrono.
is_close_on_commit bit Specifica se il cursore è stato dichiarato tramite CURSOR_CLOSE_ON_COMMIT.

1 = Il cursore verrà chiuso al termine della transazione.
fetch_status int Restituisce l'ultimo stato di recupero del cursore. Questo è l'ultimo valore restituito @@FETCH_STATUS.
fetch_buffer_size int Restituisce le informazioni sulle dimensioni del buffer di recupero.

1 = Cursori Transact-SQL. Può essere impostato su un valore più elevato per i cursori API.
fetch_buffer_start int Per i cursori FAST_FORWARD e DYNAMIC, restituisce 0 se il cursore non è aperto o se è posizionato prima della riga iniziale. In caso contrario, restituisce -1.

Per i cursori STATIC e KEYSET, restituisce 0 se il cursore non è aperto e -1 se il cursore è posizionato oltre l'ultima riga.

In caso contrario, restituisce il numero di riga in cui è posizionato.
ansi_position int Posizione del cursore all'interno del buffer di recupero.
worker_time bigint Tempo impiegato, in microsecondi, dai thread worker che eseguono il cursore.
Legge bigint Numero di letture eseguite dal cursore.
Scrive bigint Numero di scritture eseguite dal cursore.
dormant_duration bigint Millisecondi trascorsi a partire dall'avvio dell'ultima query (apertura o recupero) sul cursore.

Autorizzazioni

È richiesta l'autorizzazione VIEW SERVER STATE per il server.

Autorizzazioni per SQL Server 2022 e versioni successive

È richiesta l'autorizzazione VIEW SERVER PERFORMANCE STATE per il server.

Osservazioni:

Nella tabella seguente vengono fornite informazioni sull'interfaccia di dichiarazione del cursore e vengono indicati i possibili valori per la colonna delle proprietà.

Proprietà Descrizione
API Il cursore è stato dichiarato tramite una delle API di accesso ai dati (ODBC, OLEDB).
TSQL Il cursore è stato dichiarato tramite la sintassi Transact-SQL DECLARE CURSOR.

Nella tabella seguente vengono fornite informazioni sul tipo di cursore e vengono inclusi i possibili valori per la colonna delle proprietà.

Tipo Descrizione
Keyset Il cursore è stato dichiarato come Keyset.
Dinamico Il cursore è stato dichiarato come Dynamic.
Snapshot Il cursore è stato dichiarato come Snapshot o Static.
Fast_Forward Il cursore è stato dichiarato come Fast Forward.

Nella tabella seguente vengono fornite informazioni sulla concorrenza dei cursori e vengono inclusi i possibili valori per la colonna delle proprietà.

Concorrenza Descrizione
Sola lettura Il cursore è stato dichiarato come di sola lettura.
Scroll Locks Il cursore utilizza i blocchi di scorrimento.
Optimistic Il cursore utilizza il controllo della concorrenza ottimistica.

Nella tabella seguente vengono fornite informazioni sullo scopo dei cursori e vengono inclusi i possibili valori per la colonna delle proprietà.

Ambito Descrizione
Locale Specifica che l'ambito del cursore è locale rispetto al batch, alla stored procedure o al trigger in cui il cursore è stato creato.
Generale Specifica che l'ambito del cursore è globale rispetto alla connessione.

Esempi

R. Individuazione dei cursori meno recenti

Nell'esempio seguente vengono restituite informazioni sui cursori che sono rimasti aperti nel server oltre il periodo di tempo specificato di 36 ore.

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  

Vedi anche

Funzioni a gestione dinamica e DMV (Transact-SQL)
Funzioni e viste a gestione dinamica relative all'esecuzione (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)