sys.dm_exec_cursors (Transact-SQL)
Devuelve información acerca de los cursores abiertos en diversas bases de datos.
Sintaxis
dm_exec_cursors (session_id | 0 )
Argumentos
session_id | 0
Id. de la sesión. Si se especifica session_id, esta función devuelve información acerca de los cursores en la sesión especificada.Si se especifica 0, esta función devuelve información acerca de todos los cursores de todas las sesiones.
Tabla devuelta
Nombre de columna |
Tipo de datos |
Descripción |
---|---|---|
session_id |
int |
Id. de la sesión que alberga este cursor. |
cursor_id |
int |
Id. del objeto de cursor. |
name |
nvarchar(256) |
Nombre del cursor tal como lo ha definido el usuario. |
properties |
nvarchar(256) |
Especifica las propiedades del cursor. Los valores de las propiedades siguientes se concatenan para formar el valor de esta columna:
Por ejemplo, el valor devuelto en esta columna podría ser "TSQL | Dynamic | Optimistic | Global (0)". |
sql_handle |
varbinary(64) |
Identificador del texto del lote que declaró el cursor. |
statement_start_offset |
int |
Número de caracteres en el lote que se está ejecutando actualmente o procedimiento almacenado en el que se inicia la instrucción que se está ejecutando actualmente. Se puede utilizar junto con la función de administración dinámica sql_handle, statement_end_offset y sys.dm_exec_sql_text para recuperar la instrucción de ejecución actual para la solicitud. |
statement_end_offset |
int |
Número de caracteres en el lote que se está ejecutando actualmente o procedimiento almacenado en el que finaliza la instrucción que se está ejecutando actualmente. Se puede utilizar junto con la función de administración dinámica sql_handle, statement_start_offset y sys.dm_exec_sql_text para recuperar la instrucción de ejecución actual para la solicitud. |
plan_generation_num |
bigint |
Número de secuencia que se puede usar para distinguir entre instancias de los planes después de una nueva compilación. |
creation_time |
datetime |
Marca de tiempo a la que se creó este cursor. |
is_open |
bit |
Especifica si el cursor está abierto. |
is_async_population |
bit |
Especifica si el subproceso en segundo plano aún está llenando asincrónicamente un cursor KEYSET o STATIC. |
is_close_on_commit |
bit |
Especifica si el cursor se declaró mediante CURSOR_CLOSE_ON_COMMIT. 1 = El cursor se cerrará cuando finalice la transacción. |
fetch_status |
int |
Devuelve el estado de la última recopilación del cursor. Es el último valor devuelto @@FETCH_STATUS. |
fetch_buffer_size |
int |
Devuelve información acerca del tamaño del búfer de lectura. 1 = Cursores Transact-SQL. Se puede establecer en un valor mayor para los cursores API. |
fetch_buffer_start |
int |
Para cursores FAST_FORWARD y DYNAMIC, devuelve 0 si el cursor no está abierto o si se ha colocado antes de la primera fila. De lo contrario, devuelve -1. Para cursores STATIC y KEYSET, devuelve 0 si el cursor no está abierto y -1 si se ha colocado después de la última fila. De lo contrario, devuelve el número de fila en la que se ha colocado. |
ansi_position |
int |
Posición del cursor en el búfer de lectura. |
worker_time |
bigint |
Tiempo empleado, en microsegundos, por los trabajadores que ejecutan este cursor. |
reads |
bigint |
Número de lecturas realizadas por el cursor. |
writes |
bigint |
Número de escrituras realizadas por el cursor. |
dormant_duration |
bigint |
Milisegundos desde que se inició la última consulta (abierta o recuperada) en este cursor. |
Permisos
Requiere el permiso VIEW SERVER STATE en el servidor.
Notas
En la tabla siguiente se proporciona información acerca de la interfaz de la declaración del cursor y se incluyen los valores posibles para la columna de propiedades.
Propiedad |
Descripción |
---|---|
API |
El cursor se declaró mediante una de las API de acceso a datos (ODBC, OLEDB). |
TSQL |
El cursor se declaró mediante la sintaxis Transact-SQL DECLARE CURSOR. |
En la tabla siguiente se proporciona información acerca del tipo de cursor y se incluyen los valores posibles para la columna de propiedades.
Tipo |
Descripción |
---|---|
Keyset |
El cursor se ha declarado como de conjunto de claves. |
Dynamic |
El cursor se ha declarado como dinámico. |
Snapshot |
El cursor se ha declarado como instantánea o estático. |
Fast_Forward |
El cursor se ha declarado como de avance rápido. |
En la tabla siguiente se proporciona información acerca de la simultaneidad de cursor y se incluyen los valores posibles para la columna de propiedades.
Simultaneidad |
Descripción |
---|---|
Read Only |
El cursor se ha declarado como de sólo lectura. |
Scroll Locks |
El cursor utiliza bloqueos de desplazamiento. |
Optimistic |
El cursor utiliza control de simultaneidad optimista. |
En la tabla siguiente se proporciona información acerca del alcance del cursor y se incluyen los valores posibles para la columna de propiedades.
Alcance |
Descripción |
---|---|
Local |
Especifica que el alcance del cursor es local para el proceso por lotes, procedimiento almacenado o desencadenador en que se creó el cursor. |
Global |
Especifica que el alcance del cursor es global para la conexión. |
Ejemplos
A. Detectar cursores antiguos
En este ejemplo se devuelve información acerca de los cursores que llevan abiertos en el servidor más tiempo del especificado de 36 horas.
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