sys.dm_exec_connections (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库

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

注意

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

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

注意:说明了此连接使用的物理传输协议。 不可为 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 服务目标以及弹性池中的数据库、服务器管理员帐户、Microsoft Entra 管理员帐户或服务器角色的成员##MS_ServerStateReader##身份是必需的。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE STATE 权限或 ##MS_ServerStateReader## 服务器角色中的成员身份。

SQL Server 2022 及更高版本的权限

要求对服务器具有 VIEW SERVER PERFORMANCE STATE 权限。

物理联接

Diagram of physical joins for sys.dm_exec_connections.

关系基数

第一个元素 第二个元素 关系
sys.dm_exec_sessions.session_id sys.dm_exec_connections.session_id 一对零或一对多
sys.dm_exec_requests.connection_id sys.dm_exec_connections.connection_id 多对一
sys.dm_broker_connections.connection_id sys.dm_exec_connections.connection_id 一对一

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

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

示例

以下 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;  

后续步骤

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