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 :
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