SQL Server如何判断哪些会话/连接是长连接?
2024-06-06 08:50 潇湘隐者 阅读(317) 评论(0) 编辑 收藏 举报一般数据库中可能存在长连接或短连接会话。长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。如果不从应用程序入手,如何判断SQL Server数据库中哪些会话是长连接呢?
在SQL Server中有连接与会话的概念,一般而言,连接是物理概念,而会话则是逻辑上的概念。两者是对同一件事情不同层次的描述。简单讲,连接(Connection)是物理上的客户端同服务器的通信链路,会话(Session)是逻辑上的用户同服务器的通信交互。例如,在你的电脑上,使用SSMS客户端工具连接数据库,你可以开启多个会话,而连接只有一个。那么我们要判断长连接短连接,就必须使用连接的登陆时间,而不是会话的登陆时间。在SQL Server中sys.dm_exec_sessions中的login_time表示建立会话的时间,而DMV视图sys.dm_exec_connections中的connect_time表示建立连接时的时间戳,所以要你判断数据库的连接是长连接还是短连接,就可以使用sys.dm_exec_connections中的connect_time字段,假设一个连接建立超过5分钟(这个值可以根据实际情况或要求调整),就判断为长连接,那么可以使用下面SQL来查询
select s.login_name
, s.host_name
, c.client_net_address
, c.local_net_address
, c.connect_time
, s.session_id
, datediff(mi, connect_time, getdate()) as connect_duration_min
from sys.dm_exec_connections c
left join sys.dm_exec_sessions s on c.session_id =s.session_id
where c.session_id > 50 and c.local_net_address is not null
and datediff(mi, connect_time, getdate()) >5
order by connect_duration_min;
统计长连接的设备/终端的信息
select distinct c.client_net_address,
(select host_name from sys.dm_exec_sessions s where s.session_id = c.session_id) as host_name
from sys.dm_exec_connections c
where c.session_id > 50 and c.local_net_address is not null
and datediff(mi, c.connect_time, getdate()) >5
order by client_net_address,host_name;

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战