sys.dm_exec_sessions (Transact-SQL)
针对 SQL Server 上的每个经过身份验证的会话返回一行。sys.dm_exec_sessions 是服务器范围的视图,显示了有关所有活动用户连接和内部任务的信息。此信息包含客户端版本、客户端程序名称、客户端登录时间、登录用户、当前会话设置等。使用 sys.dm_exec_sessions,首先可以查看当前的系统负荷并标识相关会话,然后可以通过其他动态管理视图或动态管理函数了解有关该会话的详细信息。
sys.dm_exec_connections、sys.dm_exec_sessions 和 sys.dm_exec_requests 动态管理视图映射到 sys.sysprocesses 系统表。
列名 |
数据类型 |
说明 |
---|---|---|
session_id |
smallint |
标识与每个活动主连接关联的会话。不可为 Null 值。 |
login_time |
datetime |
建立会话的时间。不可为 Null 值。 |
host_name |
nvarchar(128) |
特定于会话的客户端工作站名称。对于内部会话,该值为 NULL。可为 Null 值。 |
program_name |
nvarchar(128) |
初始化会话的客户端程序的名称。对于内部会话,该值为 NULL。可为 Null 值。 |
host_process_id |
int |
启动会话的客户端程序的进程 ID。对于内部会话,该值为 NULL。可为 Null 值。 |
client_version |
int |
客户端连接到服务器所用接口的 TDS 协议版本。对于内部会话,该值为 NULL。可为 Null 值。 |
client_interface_name |
nvarchar(32) |
客户端连接到服务器所用的协议名称。对于内部会话,该值为 NULL。可为 Null 值。 |
security_id |
varbinary(85) |
与登录名关联的 Microsoft Windows 安全 ID。不可为 Null 值。 |
login_name |
nvarchar(128) |
当前执行的会话所使用的 SQL Server 登录名。有关创建此会话的原始登录名,请参阅 original_login_name。可以是经过 SQL Server 身份验证的登录名,也可以是经过 Windows 身份验证的域用户名。不可为 Null 值。 |
nt_domain |
nvarchar(128) |
客户端的 Windows 域(如果使用 Windows 身份验证或可信连接进行会话)。对于内部会话和非域用户,该值为 NULL。可为 Null 值。 |
nt_user_name |
nvarchar(128) |
客户端的 Windows 用户名(如果使用 Windows 身份验证或可信连接进行会话)。对于内部会话和非域用户,该值为 NULL。可为 Null 值。 |
status |
nvarchar(30) |
会话的状态。可能的值:
不可为 Null 值。 |
context_info |
varbinary(128) |
会话的 CONTEXT_INFO 值。用户使用 SET CONTEXT_INFO 语句设置上下文信息。可为 Null 值。 |
cpu_time |
int |
该会话所占用的 CPU 时间(毫秒)。不可为 Null 值。 |
memory_usage |
int |
该会话所占用的 8 KB 内存页数。不可为 Null 值。 |
total_scheduled_time |
int |
计划内含请求的会话的执行所耗用的总计时间(毫秒)。不可为 Null 值。 |
total_elapsed_time |
int |
自会话建立以来已耗用的时间(毫秒)。不可为 Null 值。 |
endpoint_id |
int |
与会话关联的端点的 ID。不可为 Null 值。 |
last_request_start_time |
datetime |
最近一次会话请求的开始时间。这包括当前正在执行的请求。不可为 Null 值。 |
last_request_end_time |
datetime |
最近一次会话请求的完成时间。可为 Null 值。 |
reads |
bigint |
在该会话期间该会话中的请求所执行的读取次数。不可为 Null 值。 |
writes |
bigint |
在该会话期间该会话中的请求所执行的写入次数。不可为 Null 值。 |
logical_reads |
bigint |
已对该会话执行的逻辑读取数。不可为 Null 值。 |
is_user_process |
bit |
如果会话是系统会话,则为 0。否则为 1。不可为 Null 值。 |
text_size |
int |
会话的 TEXTSIZE 设置。不可为 Null 值。 |
language |
nvarchar(128) |
会话的 LANGUAGE 设置。可为 Null 值。 |
date_format |
nvarchar(3) |
会话的 DATEFORMAT 设置。可为 Null 值。 |
date_first |
smallint |
会话的 DATEFIRST 设置。不可为 Null 值。 |
quoted_identifier |
bit |
会话的 QUOTED_IDENTIFIER 设置。不可为 Null 值。 |
arithabort |
bit |
会话的 ARITHABORT 设置。不可为 Null 值。 |
ansi_null_dflt_on |
bit |
会话的 ANSI_NULL_DFLT_ON 设置。不可为 Null 值。 |
ansi_defaults |
bit |
会话的 ANSI_DEFAULTS 设置。不可为 Null 值。 |
ansi_warnings |
bit |
会话的 ANSI_WARNINGS 设置。不可为 Null 值。 |
ansi_padding |
bit |
会话的 ANSI_PADDING 设置。不可为 Null 值。 |
ansi_nulls |
bit |
会话的 ANSI_NULLS 设置。不可为 Null 值。 |
concat_null_yields_null |
bit |
会话的 CONCAT_NULL_YIELDS_NULL 设置。不可为 Null 值。 |
transaction_isolation_level |
smallint |
会话的事务隔离级别。 0 = 未指定 1 = 未提交读取 2 = 已提交读取 3 = 可重复 4 = 可序列化 5 = 快照 不可为 Null 值。 |
lock_timeout |
int |
会话的 LOCK_TIMEOUT 设置。该值以毫秒计。不可为 Null 值。 |
deadlock_priority |
int |
会话的 DEADLOCK_PRIORITY 设置。不可为 Null 值。 |
row_count |
bigint |
到目前为止会话返回的行数。不可为 Null 值。 |
prev_error |
int |
会话返回的最近一个错误的 ID。不可为 Null 值。 |
original_security_id |
varbinary(85) |
与 original_login_name 关联的 Microsoft Windows 安全 ID。不可为 Null 值。 |
original_login_name |
nvarchar(128) |
客户端用于创建此会话的 SQL Server 登录名。可以是经过 SQL Server 身份验证的登录名,也可以是经过 Windows 身份验证的域用户名。请注意,此会话在初次连接后可能已进行多次隐式或显式上下文切换。例如,如果使用了 EXECUTE AS。不可为 Null 值。 |
last_successful_logon |
datetime |
当前会话开始前 original_login_name 上一次成功登录的时间。 |
last_unsuccessful_logon |
datetime |
当前会话开始前,original_login_name 上一次登录失败的时间。 |
unsuccessful_logons |
bigint |
在 last_successful_logon 和 login_time 之间 original_login_name 的登录失败次数。 |
group_id |
int |
此会话所属工作负荷组的 ID。不可为 Null 值。 |
权限
需要对服务器拥有 VIEW SERVER STATE 权限。
注意 |
---|
如果用户对服务器具有 VIEW SERVER STATE 权限,则该用户可以查看 SQL Server 实例上所有正在执行的会话;否则,该用户只能查看当前会话。 |
注释
有关符合通用准则的登录统计信息
使用存储过程 sp_configure 启用“已启用符合通用准则”选项时,登录统计信息将存储并显示在 sys.dm_exec_sessions 的以下列中:
last_successful_logon
last_unsuccessful_logon
unsuccessful_logons
如果未启用此服务器配置选项,这些 sys.dm_exec_sessions 列将返回空值。有关如何设置此服务器配置选项的详细信息,请参阅 common criteria compliance enabled 选项。
关系基数
从 |
到 |
对于/应用 |
关系 |
---|---|---|---|
sys.dm_exec_sessions |
sys.dm_exec_requests |
session_id |
一对零或一对多 |
sys.dm_exec_sessions |
sys.dm_exec_connections |
session_id |
一对零或一对多 |
sys.dm_exec_sessions |
sys.dm_tran_session_transactions |
session_id |
一对零或一对多 |
sys.dm_exec_sessions |
sys.dm_exec_cursors(session_id | 0) |
session_id CROSS APPLY OUTER APPLY |
一对零或一对多 |
sys.dm_exec_sessions |
sys.dm_db_session_space_usage |
session_id |
一对一 |
示例
A. 查找连接到服务器的用户
下例将查找连接到服务器的用户并返回每个用户的会话数。
SELECT login_name ,COUNT(session_id) AS session_count
FROM sys.dm_exec_sessions
GROUP BY login_name;
B. 查找长时间运行的游标
下例将查找打开时间超过指定时间段的游标、创建游标的用户以及游标所在的会话。
USE master;
GO
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(mi, c.creation_time, GETDATE()) > 5;
C. 查找具有已打开事务的空闲会话
下例将查找具有已打开事务的空闲会话。空闲会话是当前未运行请求的会话。
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
);