sys.dm_exec_cursors (Transact-SQL)

Se aplica a:SQL Server

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 sobre los cursores de 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 la 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 usar junto con el sql_handle, el statement_end_offset y la función de administración dinámica sys.dm_exec_sql_text para recuperar la instrucción que se está ejecutando actualmente 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 usar junto con el sql_handle, el statement_start_offset y la función de administración dinámica sys.dm_exec_sql_text para recuperar la instrucción que se está ejecutando actualmente 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.
Lecturas bigint Número de lecturas realizadas por el cursor.
Escrituras bigint Número de escrituras realizadas por el cursor.
dormant_duration bigint Milisegundos desde que se inició la última consulta (abierta o capturada) en este cursor.

Permisos

es necesario contar con el permiso VIEW SERVER STATE en el servidor.

Permisos para SQL Server 2022 y versiones posteriores

Requiere el permiso VIEW SERVER PERFORMANCE STATE en el servidor.

Observaciones

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.
Dinámica El cursor se ha declarado como dinámico.
Depurador de 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 Description
Solo lectura El cursor se ha declarado como de solo 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.

Ámbito 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  

Consulte también

Funciones y vistas de administración dinámica (Transact-SQL)
Funciones y vistas de administración dinámica relacionadas con ejecuciones (Transact-SQL)
sys.dm_exec_sessions (Transact-SQL)