Comparteix a través de


sys.dm_exec_sessions (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric

Devuelve una fila por cada sesión autenticada en SQL Server. sys.dm_exec_sessions es una vista de ámbito de servidor que muestra información acerca de todas las conexiones de usuario activas y las tareas internas. Esta información incluye la versión del cliente, el nombre del programa cliente, la hora de inicio de sesión del cliente, el usuario de inicio de sesión, la configuración de la sesión actual, etcétera. Use sys.dm_exec_sessions para ver primero la carga del sistema actual e identificar una sesión de interés y obtener después más información acerca de esa sesión mediante otras vistas o funciones de administración dinámica.

Las vistas de administración dinámica sys.dm_exec_connections, sys.dm_exec_sessions y sys.dm_exec_requests se asignan a la vista de compatibilidad del sistema sys.sysprocesses.

Nota:

Para llamarlo desde un grupo de SQL dedicado de Azure Synapse Analytics o Analytics Platform System (PDW), consulte sys.dm_pdw_nodes_exec_sessions. Para el grupo de SQL sin servidor o Microsoft Fabric, use sys.dm_exec_sessions.

Nombre de la columna Tipo de datos Descripción e información específica de la versión
session_id smallint Identifica la sesión asociada a cada conexión principal activa. No acepta valores NULL.
login_time datetime Hora en que se estableció la sesión. No acepta valores NULL. Las sesiones que no han iniciado sesión completamente en el momento en que se consulta esta DMV se muestran con una hora de inicio de sesión de 1900-01-01.
host_name nvarchar(128) Nombre de la estación de trabajo cliente específica de una sesión. El valor es NULL para las sesiones internas. Acepta valores NULL.

Nota de seguridad: La aplicación cliente proporciona el nombre de la estación de trabajo y puede proporcionar datos inexactos. No se base en HOST_NAME una característica de seguridad.
program_name nvarchar(128) Nombre del programa cliente que inició la sesión. El valor es NULL para las sesiones internas. Acepta valores NULL.
host_process_id int Identificador de proceso del programa cliente que inició la sesión. El valor es NULL para las sesiones internas. Acepta valores NULL.
client_version int Versión del protocolo TDS de la interfaz utilizada por el cliente para conectarse al servidor. El valor es NULL para las sesiones internas. Acepta valores NULL.
client_interface_name nvarchar(32) Nombre de la biblioteca o controlador que usa el cliente para comunicarse con el servidor. El valor es NULL para las sesiones internas. Acepta valores NULL.
security_id varbinary(85) Identificador de seguridad de Windows asociado al inicio de sesión. No acepta valores NULL.
login_name nvarchar(128) Nombre de inicio de sesión de SQL Server en el que se está ejecutando la sesión. Para obtener el nombre de inicio de sesión original que creó la sesión, consulte original_login_name. Puede ser un nombre de inicio de sesión autenticado en SQL Server o un nombre de usuario de dominio autenticado en Windows. No acepta valores NULL.
nt_domain nvarchar(128) Dominio de Windows para el cliente si la sesión utiliza la autenticación de Windows o una conexión de confianza. Este valor es NULL para sesiones internas y usuarios que no son de dominio. Acepta valores NULL.
nt_user_name nvarchar(128) Nombre de usuario de Windows para el cliente si la sesión utiliza la autenticación de Windows o una conexión de confianza. Este valor es NULL para sesiones internas y usuarios que no son de dominio. Acepta valores NULL.
status nvarchar(30) Estado de la sesión. Valores posibles:

Running - Actualmente, se ejecutan una o varias solicitudes.
Sleeping - Actualmente no se ejecutan solicitudes
Dormant - La sesión se ha restablecido debido a la agrupación de conexiones y ahora está en estado de prelogin.
Preconnect - La sesión está en el clasificador resource Governor.

No acepta valores NULL.
context_info varbinary(128) CONTEXT_INFO valor de la sesión. El usuario establece la información de contexto mediante la instrucción SET CONTEXT_INFO. Acepta valores NULL.
cpu_time int Tiempo de CPU, en milisegundos, utilizado por esta sesión. No acepta valores NULL.
memory_usage int Número de páginas de memoria de 8 KB utilizadas por esta sesión. No acepta valores NULL.
total_scheduled_time int Tiempo total, en milisegundos, para el que se programó la ejecución de la sesión (sus solicitudes). No acepta valores NULL.
total_elapsed_time int Tiempo transcurrido, en milisegundos, desde que se estableció la sesión. No acepta valores NULL.
endpoint_id int Identificador del punto de conexión asociado a la sesión. No acepta valores NULL.
last_request_start_time datetime Hora a la que comenzó la última solicitud de la sesión. Esta vez incluye la solicitud que se está ejecutando actualmente. No acepta valores NULL.
last_request_end_time datetime Hora a la que se realizó por última vez una solicitud de la sesión. Acepta valores NULL.
reads bigint Número de lecturas realizadas, por solicitudes de esta sesión, durante esta sesión. No acepta valores NULL.
writes bigint Número de escrituras realizadas, por solicitudes de esta sesión, durante esta sesión. No acepta valores NULL.
logical_reads bigint Número de lecturas lógicas realizadas, por solicitudes de esta sesión, durante esta sesión. No acepta valores NULL.
is_user_process bit 0 si la sesión es una sesión del sistema. De lo contrario, es 1. No acepta valores NULL.
text_size int TEXTSIZE configuración de la sesión. No acepta valores NULL.
language nvarchar(128) LANGUAGE configuración de la sesión. Acepta valores NULL.
date_format nvarchar (3) DATEFORMAT configuración de la sesión. Acepta valores NULL.
date_first smallint DATEFIRST configuración de la sesión. No acepta valores NULL.
quoted_identifier bit QUOTED_IDENTIFIER configuración de la sesión. No acepta valores NULL.
arithabort bit ARITHABORT configuración de la sesión. No acepta valores NULL.
ansi_null_dflt_on bit ANSI_NULL_DFLT_ON configuración de la sesión. No acepta valores NULL.
ansi_defaults bit ANSI_DEFAULTS configuración de la sesión. No acepta valores NULL.
ansi_warnings bit ANSI_WARNINGS configuración de la sesión. No acepta valores NULL.
ansi_padding bit ANSI_PADDING configuración de la sesión. No acepta valores NULL.
ansi_nulls bit ANSI_NULLS configuración de la sesión. No acepta valores NULL.
concat_null_yields_null bit CONCAT_NULL_YIELDS_NULL configuración de la sesión. No acepta valores NULL.
transaction_isolation_level smallint Nivel de aislamiento de transacción de la sesión.

0 = Unspecified
1 = ReadUncommitted
2 = ReadCommitted
3 = RepeatableRead
4 = Serializable
5 = Snapshot

No acepta valores NULL.
lock_timeout int LOCK_TIMEOUT configuración de la sesión. El valor se expresa en milisegundos. No acepta valores NULL.
deadlock_priority int DEADLOCK_PRIORITY configuración de la sesión. No acepta valores NULL.
row_count bigint Número de filas devueltas en la sesión hasta este momento. No acepta valores NULL.
prev_error int Identificador del último error devuelto en la sesión. No acepta valores NULL.
original_security_id varbinary(85) Identificador de seguridad de Windows asociado a .original_login_name No acepta valores NULL.
original_login_name nvarchar(128) Nombre de inicio de sesión de SQL Server que el cliente usó para crear esta sesión. Puede ser un nombre de inicio de sesión autenticado en SQL Server, un nombre de usuario de dominio autenticado en Windows o un usuario de base de datos independiente. La sesión podría haber pasado por muchos modificadores de contexto implícitos o explícitos después de la conexión inicial, por ejemplo, si se usa EXECUTE AS . No acepta valores NULL.
last_successful_logon datetime Hora del último inicio de sesión correcto para antes original_login_name de que se inicie la sesión actual.
last_unsuccessful_logon datetime Hora del último intento de inicio de sesión incorrecto para antes original_login_name de que se inicie la sesión actual.
unsuccessful_logons bigint Número de intentos de inicio de sesión incorrectos para entre original_login_name y last_successful_logon login_time.
group_id int Identificador del grupo de cargas de trabajo al que pertenece esta sesión. No acepta valores NULL.
database_id smallint Identificador de la base de datos actual para cada sesión.

En Azure SQL Database, los valores son únicos dentro de una base de datos única o un grupo elástico, pero no dentro de un servidor lógico.

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.
authenticating_database_id int Identificador de la base de datos que autentica la entidad de seguridad. En el caso de los inicios de sesión, el valor es 0. Para los usuarios de bases de datos independientes, el valor es el identificador de base de datos de la base de datos independiente.

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.
open_transaction_count int Número de transacciones abiertas por sesión.

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores.
pdw_node_id int Identificador del nodo en el que se encuentra esta distribución.

Se aplica a: Azure Synapse Analytics y Analytics Platform System (PDW).
page_server_reads bigint Número de lecturas del servidor de páginas realizadas, por solicitudes de esta sesión, durante esta sesión. No acepta valores NULL.

Se aplica a: Hiperescala de Azure SQL Database.

Permisos

Todos pueden ver su propia información de sesión.

En SQL Server 2019 (15.x) y versiones anteriores, es necesario VIEW SERVER STATE ver todas las sesiones en el servidor. En SQL Server 2022 (16.x) y versiones posteriores, requiere VIEW SERVER PERFORMANCE STATE permiso en el servidor.

En SQL Database, es necesario VIEW DATABASE STATE ver todas las conexiones a la base de datos actual. VIEW DATABASE STATE no se puede conceder en la base de datos master.

Comentarios

Cuando la opción de configuración del common criteria compliance enabled servidor está habilitada, las estadísticas de inicio de sesión se muestran en las columnas siguientes.

  • last_successful_logon
  • last_unsuccessful_logon
  • unsuccessful_logons

Si esta opción no está habilitada, estas columnas devuelven valores NULL. Para obtener más información sobre cómo establecer esta opción de configuración de servidor, consulte Configuración del servidor: cumplimiento de criterios comunes habilitado.

Las conexiones de administrador en Azure SQL Database ven una fila por sesión autenticada. Las sa sesiones que aparecen en el conjunto de resultados no tienen ningún efecto en la cuota de usuario para las sesiones. Las conexiones que no son de administrador solo ven información relacionada con sus sesiones de usuario de base de datos.

Debido a las diferencias en cómo se registran, open_transaction_count puede que no coincida con sys.dm_tran_session_transactions.open_transaction_count.

Cardinalidades de relación

De En On/Apply Relación
sys.dm_exec_sessions sys.dm_exec_requests session_id Uno a ninguno o uno a varios
sys.dm_exec_sessions sys.dm_exec_connections session_id Uno a ninguno o uno a varios
sys.dm_exec_sessions sys.dm_tran_session_transactions session_id Uno a ninguno o uno a varios
sys.dm_exec_sessions sys.dm_exec_cursors ( | session_id0) session_id CROSS APPLY

OUTER APPLY
Uno a ninguno o uno a varios
sys.dm_exec_sessions sys.dm_db_session_space_usage session_id Uno a uno

Ejemplos

A. Búsqueda de usuarios conectados al servidor

En el ejemplo siguiente se buscan los usuarios que están conectados al servidor y se devuelve el número de sesiones de cada usuario.

SELECT login_name,
    COUNT(session_id) AS session_count
FROM sys.dm_exec_sessions
GROUP BY login_name;

B. Búsqueda de cursores de ejecución prolongada

En el ejemplo siguiente se buscan los cursores abiertos durante más de un período de tiempo específico, quién creó los cursores y en qué sesión se encuentran los cursores.

USE master;
GO

SELECT creation_time,
    cursor_id,
    name,
    c.session_id,
    login_name
FROM sys.dm_exec_cursors(0) AS c
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE DATEDIFF(mi, c.creation_time, GETDATE()) > 5;
GO

C. Búsqueda de sesiones inactivas que tienen transacciones abiertas

En el ejemplo siguiente se buscan sesiones que tienen transacciones abiertas y están inactivas. Una sesión inactiva es aquélla que no tiene ninguna solicitud en ejecución.

SELECT s.*
FROM sys.dm_exec_sessions AS s
WHERE EXISTS (
        SELECT *
        FROM sys.dm_tran_session_transactions AS t
        WHERE t.session_id = s.session_id
    )
    AND NOT EXISTS (
        SELECT *
        FROM sys.dm_exec_requests AS r
        WHERE r.session_id = s.session_id
    );

D. Búsqueda de información sobre la propia conexión de una consulta

En el ejemplo siguiente se recopila información sobre la propia conexión de una consulta:

SELECT c.session_id,
    c.net_transport,
    c.encrypt_option,
    c.auth_scheme,
    s.host_name,
    s.program_name,
    s.client_interface_name,
    s.login_name,
    s.nt_domain,
    s.nt_user_name,
    s.original_login_name,
    c.connect_time,
    s.login_time
FROM sys.dm_exec_connections AS c
INNER JOIN sys.dm_exec_sessions AS s
    ON c.session_id = s.session_id
WHERE c.session_id = @@SPID;