Share via


sys.dm_exec_cursors (Transact-SQL)

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 | Dynamic | Optimistic | Global (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 utilizzata in combinazione con la colonna sql_handle, la colonna statement_end_offset e la funzione a gestione dinamica sys.dm_exec_sql_text per recuperare l'istruzione 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 utilizzata in combinazione con la colonna sql_handle, la colonna statement_start_offset e la funzione a gestione dinamica sys.dm_exec_sql_text per recuperare l'istruzione 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. Si tratta dell'ultimo valore @@FETCH_STATUS restituito.

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.

reads

bigint

Numero di letture eseguite dal cursore.

writes

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 nel 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à.

Type

Descrizione

Keyset

Il cursore è stato dichiarato come Keyset.

Dynamic

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

Read Only

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

Local

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

Global

Specifica che l'ambito del cursore è globale rispetto alla connessione.

Esempi

A. 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