sys.dm_exec_cursors (Transact-SQL)

Retourne des informations sur les curseurs ouverts dans diverses bases de données.

Syntaxe

dm_exec_cursors (session_id | 0 )

Arguments

  • session_id | 0
    ID de la session. Si session_id est spécifié, cette fonction retourne des informations sur les curseurs dans la session spécifiée.

    Si 0 est spécifié, la fonction retourne des informations sur tous les curseurs dans toutes les sessions.

Table retournée

Nom de la colonne

Type de données

Description

session_id

int

ID de la session propriétaire de ce curseur.

cursor_id

int

ID de l'objet curseur.

name

nvarchar(256)

Nom du curseur, défini par l'utilisateur.

properties

nvarchar(256)

Spécifie les propriétés du curseur. Les valeurs des propriétés suivantes sont concaténées pour former la valeur de cette colonne :

  • Interface déclaration

  • Type de curseur

  • Accès simultané au curseur

  • Étendue du curseur

  • Niveau d'imbrication du curseur

Par exemple, la valeur retournée dans cette colonne peut être la suivante : "TSQL | Dynamic | Optimistic | Global (0)".

sql_handle

varbinary(64)

Descripteur du texte du traitement qui a déclaré le curseur.

statement_start_offset

int

Nombre de caractères dans le traitement ou la procédure stockée en cours d'exécution où les instructions en cours d'exécution commencent. Cette valeur peut être utilisée avec les fonctions de gestion dynamique sql_handle, statement_end_offset et sys.dm_exec_sql_text pour extraire l'instruction en cours d'exécution de la demande.

statement_end_offset

int

Nombre de caractères dans le traitement ou la procédure stockée en cours d'exécution où les instructions en cours d'exécution se terminent. Cette valeur peut être utilisée avec les fonctions de gestion dynamique sql_handle, statement_start_offset et sys.dm_exec_sql_text pour extraire l'instruction en cours d'exécution de la demande.

plan_generation_num

bigint

Numéro de séquence permettant de distinguer les instances de plans après une recompilation.

creation_time

datetime

Heure de création du curseur.

is_open

bit

Indique si le curseur est ouvert.

is_async_population

bit

Spécifie si le thread d'arrière-plan remplit toujours de manière asynchrone un curseur KEYSET ou STATIC.

is_close_on_commit

bit

Spécifie si le curseur a été déclaré à l'aide de CURSOR_CLOSE_ON_COMMIT.

1 = Le curseur est fermé à la fin de la transaction.

fetch_status

int

Retourne le dernier état d'extraction du curseur. Il s'agit de la dernière valeur @@FETCH_STATUS retournée.

fetch_buffer_size

int

Retourne des informations sur la taille du tampon d'extraction.

1 = Curseurs Transact-SQL. Il est possible de définir une valeur supérieure pour les curseurs des API.

fetch_buffer_start

int

Pour les curseurs FAST_FORWARD et DYNAMIC, retourne 0 si le curseur n'est pas ouvert ou s'il est positionné devant la première ligne. Sinon, retourne -1.

Pour les curseurs STATIC et KEYSET, retourne 0 si le curseur n'est pas ouvert et -1 si le curseur est positionné au-delà de la dernière ligne.

Sinon, retourne le numéro de la ligne où il est positionné.

ansi_position

int

Position du curseur dans le tampon d'extraction.

worker_time

bigint

Temps, en microsecondes, passés par les travaux qui exécutent ce curseur.

reads

bigint

Nombre de lectures effectuées par le curseur.

writes

bigint

Nombre d'écritures effectuées par le curseur.

dormant_duration

bigint

Millisecondes écoulées depuis le début de la dernière requête (ouverture ou extraction) sur ce curseur.

Autorisations

Nécessite l'autorisation VIEW SERVER STATE sur le serveur.

Notes

Le tableau ci-dessous fournit des informations sur l'interface de déclaration du curseur et inclut les valeurs possibles pour la colonne des propriétés.

Propriété

Description

API

Le curseur a été déclaré en utilisant une des API d'accès aux données (ODBC, OLEDB).

TSQL

Le curseur a été déclaré à l'aide de la syntaxe Transact-SQL DECLARE CURSOR.

Le tableau ci-dessous fournit des informations sur le type du curseur et inclut les valeurs possibles pour la colonne des propriétés.

Type

Description

Keyset

Le curseur est déclaré comme Keyset.

Dynamic

Le curseur est déclaré comme dynamique.

Snapshot

Le curseur est déclaré comme capture instantanée ou statique.

Fast_Forward

Le curseur est déclaré comme curseur avant.

Le tableau ci-dessous fournit des informations sur l'accès concurrentiel au curseur et inclut les valeurs possibles pour la colonne des propriétés.

Accès concurrentiel

Description

Read Only

Le curseur est déclaré en lecture seule

Scroll Locks

Le curseur utilise des défilements.

Optimistic

Le curseur utilise l'accès concurrentiel optimiste.

Le tableau ci-dessous fournit des informations sur l'étendue du curseur et inclut les valeurs possibles pour la colonne des propriétés.

Étendue

Description

Local

Spécifie que l'étendue du curseur est locale pour le traitement d'instructions, la procédure stockée ou le déclencheur dans lequel il a été créé.

Global

Spécifie que l'étendue du curseur est globale pour la connexion.

Exemples

A. Détection des anciens curseurs

Cet exemple retourne des informations sur les curseurs ouverts sur le serveur pendant une durée supérieure aux 36 heures spécifiées.

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