sys.dm_exec_connections (Transact-SQL)

适用于:SQL Server (所有受支持的版本) Azure SQL数据库Azure SQL 托管实例 Azure Synapse Analytics

返回有关与数据库引擎此实例建立的连接以及每个连接的详细信息的信息。 返回SQL Server和Azure SQL 托管实例的服务器范围连接信息。 返回 Azure SQL 数据库中当前数据库的连接信息。 为Azure SQL数据库中弹性池中的数据库返回同一弹性池中的所有数据库的连接信息。

注意

若要从 Azure Synapse Analytics 或 Analytics Platform System (PDW) 中的专用 SQL 池调用此功能,请参阅 sys.dm_pdw_exec_connections (Transact-SQL) 。 对于无服务器 SQL 池,请使用 sys.dm_exec_connections

列名称 数据类型 说明
session_id int 标识与此连接关联的会话。 可以为 Null。
most_recent_session_id int 表示与此连接关联的最近请求的会话 ID。 (SOAP 连接可由另一个 session.) 为 null 来重复使用。
connect_time datetime 连接建立时的时间戳。 不可为 null。
net_transport nvarchar(40) 使用 MARS 时,返回与 MARS 逻辑会话关联的每个附加连接的 会话

注意: 描述此连接使用的物理传输协议。 不可为 null。
protocol_type nvarchar(40) 指定负载的协议类型。 它当前区分 TDS (“TSQL”) 、“SOAP”和“数据库镜像”。 可以为 Null。
protocol_version int 与此连接关联的数据访问协议的版本。 可以为 Null。
endpoint_id int 说明其连接类型的标识符。 这 endpoint_id 可用于查询 sys.endpoints 视图。 可以为 Null。
encrypt_option nvarchar(40) 说明是否为此连接启用了加密的布尔值。 不可为 null。
auth_scheme nvarchar(40) 指定用于此连接的SQL Server/Windows 身份验证方案。 不可为 null。
node_affinity smallint 标识与此连接关联的内存节点。 不可为 null。
num_reads int 通过此连接发生的字节读取数。 可以为 Null。
num_writes int 通过此连接发生的字节写入数。 可以为 Null。
last_read datetime 此连接中上一次发生读操作的时间戳。 可以为 Null。
last_write datetime 此连接中上一次发生写操作的时间戳。 不可为 Null。
net_packet_size int 用于信息和数据传输的网络包的大小。 可以为 Null。
client_net_address varchar(48) 与此服务器连接的客户端的主机地址。 可以为 Null。
client_tcp_port int 与此连接关联的客户端计算机上的端口号。 可以为 Null。

在Azure SQL数据库中,此列始终返回 NULL。
local_net_address varchar(48) 表示此连接的目标服务器的 IP 地址。 只对使用 TCP 传输提供程序的连接可用。 可以为 Null。

在Azure SQL数据库中,此列始终返回 NULL。
local_tcp_port int 如果此连接使用 TCP 传输,则表示此连接的目标服务器的 TCP 端口。 可以为 Null。

在Azure SQL数据库中,此列始终返回 NULL。
connection_id uniqueidentifier 对每个连接进行唯一标识。 不可为 null。
parent_connection_id uniqueidentifier 标识 MARS 会话正在使用的主要连接。 可以为 Null。
most_recent_sql_handle varbinary(64) 此连接上执行的上一个请求的 SQL 句柄。 most_recent_sql_handle 列始终与 most_recent_session_id 列同步。 可以为 Null。
pdw_node_id int 适用于:Azure Synapse Analytics、Analytics Platform System (PDW)

此分发所在节点的标识符。

权限

对于 SQL Server 和 SQL 托管实例,需要 VIEW SERVER STATE 权限。

在Azure SQL数据库基本S0S1 服务目标上,对于弹性池中的数据库,需要服务器管理员帐户、Azure Active Directory 管理员帐户或服务器角色的成员##MS_ServerStateReader##身份。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE 权限或 ##MS_ServerStateReader## 服务器角色中的成员身份。

物理联接

sys.dm_exec_connections的物理联接图。

关系基数

First 元素 Second 元素 关系
sys.dm_exec_sessionssession_id sys.dm_exec_connections.session_id 一对零或一对多
sys.dm_exec_requestsconnection_id sys.dm_exec_connections.connection_id 多对一
sys.dm_broker_connectionsconnection_id sys.dm_exec_connections.connection_id 一对一

通常,对于每一行,sys.dm_exec_connections有一个匹配行。sys.dm_exec_sessions 但是,在某些情况下(例如系统内部会话或 Service Broker 激活过程)中,在不使用匹配行sys.dm_exec_connections的情况下,可能会有一行sys.dm_exec_sessions

使用 MARS 时,一行中 sys.dm_exec_connections 可能有多个行 sys.dm_exec_sessions,一行用于父连接,每个 MARS 逻辑会话有一行。 后一行可以通过设置为 Session 的列中的值net_transport来标识。 对于这些连接,列中的值connection_idsys.dm_exec_connections与正在进行的 MARS 请求列中sys.dm_exec_requests的值connection_id匹配。

示例

以下 Transact-SQL 查询收集有关查询自己的连接的信息。

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  
JOIN sys.dm_exec_sessions AS s  
    ON c.session_id = s.session_id  
WHERE c.session_id = @@SPID;  

后续步骤

通过以下文章详细了解相关概念: