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

SQL Server中TempDb占满问题:如何按时间定位操作用户

SQL Server TempDb 占满问题:定位高写入操作的用户

问题背景

SQL Server 的 TempDb 被外部查询持续写入数据,每2-3天就会被占满,只能通过重启数据库恢复。已通过 Whoisactive 获取活跃会话信息,且通过 Grafana 定位到大量写入操作的精确时间,需据此排查对应的操作用户。

修正后的查询语句

原查询存在语法错误(ORDER BY 需置于 WHERE 之后、列名拼写错误、BETWEEN 格式错误),修正后的语句如下:

SELECT TOP 40 User_Account, start_date, tempdb_allocations
FROM Whoisactive
WHERE start_date BETWEEN '2023-02-15 14:12:14.13' AND '2023-02-15 15:12:14.13'
ORDER BY tempdb_allocations DESC

查询结果

User_AccountStart_Datetempdb_allocations
kkarla12023-02-15 14:12:14.1312
bbert22023-02-11 12:12:14.130
ubert52023-02-15 15:12:14.13888889

排查结论与后续操作

  • 从结果可见,目标时间窗口内,用户 ubert5 的 tempdb_allocations 数值异常偏高,是导致本次 TempDb 大量写入的核心对象。
  • 进一步定位该用户的具体操作:
    • 调用 Whoisactive 的完整结果,查看该用户对应的 sql_text、session_id 字段,确认其执行的语句类型(如大表排序、哈希连接、临时表滥用、批量数据处理等)。
    • 核对该用户的业务操作场景,判断是周期性任务、报表查询还是异常脚本。
    • 若为周期性任务,通过 SQL Server Agent 或调度工具找到对应任务,调整执行策略或优化语句以降低 TempDb 消耗。
  • 长期优化措施:
    • 给 TempDb 设置空间告警阈值,提前预警占用过高问题。
    • 优化高消耗 TempDb 的查询,比如添加索引减少排序操作、替换不必要的临时表。
    • 调整 TempDb 文件配置(增加数据文件数量、合理设置自动增长规则),提升承载能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:22:14