You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server的sys.dm_exec_sessions可追溯多久的历史会话?

问题结论

你观察到的sys.dm_exec_sessions仅返回最近数小时会话记录的现象完全正常。

关于sys.dm_exec_sessions的留存规则

这个动态管理视图不属于历史日志类视图,没有固定的时间覆盖范围,它的存储逻辑完全基于实例内存的会话槽周转:

  • 所有当前处于活跃状态的连接(包括空闲连接、连接池持有的长连接),对应的会话记录会一直保留在视图结果中
  • 会话断开连接后,对应记录不会被立刻删除,会暂存在内存的会话槽中,直到该槽位被新创建的会话覆盖
    • 如果实例并发量低、新会话创建频率慢,断开数天的会话记录都可能被查到
    • 如果实例业务繁忙、会话周转速度快,断开仅数分钟的会话记录就可能被新会话覆盖清空
  • 实例服务重启后,sys.dm_exec_sessions的所有历史记录会直接全部清空,不会做持久化留存。

你当前查到仅剩余最近数小时的记录,本质是当前实例的会话周转速度,已经把更早断开的会话记录全部覆盖了。

排查长期未使用用户账号的注意事项

你最初执行的查询语句如下:

select * from sys.dm_exec_sessions order by login_time

用这个视图排查长期未使用账号的思路存在缺陷:它无法覆盖几周、几个月维度的登录历史,完全不能作为账号长期未登录的判断依据。
在SQL Server 2017环境下,要准确识别未使用的用户账号,可以参考以下方案:

  • 新建专门的登录记录审计表,按固定周期(比如每1-2小时)抓取sys.dm_exec_sessions中is_user_process = 1的用户会话信息,去重后写入审计表持久化保存,累积1-3个月的记录后,再和sys.server_principals中的用户账号列表做比对,筛选从未出现在审计记录中的账号
  • 启用实例级的成功登录审计,将登录事件写入SQL Server错误日志或Windows安全日志,调整错误日志的滚动保留策略,确保日志留存周期覆盖你要排查的时间范围,再基于日志记录统计每个账号的最后登录时间。

内容的提问来源于stack exchange,提问作者PhilFancy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:39:37