Compartir a través de


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:

  • Interfaz de declaración

  • Tipo de cursor

  • Simultaneidad de cursor

  • Alcance del cursor

  • Nivel de anidamiento de cursor

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