跳到主要内容
常见问题 SQL Server查询挂起阻塞

查询挂起不动了怎么处理

查询长时间无响应(被阻塞或死锁)的定位:查阻塞链与等待类型,决定等、杀或改写。

发布于 2026/11/11 所属频道 SQL Server

简短答案

查询挂起多是两种原因:被其他事务阻塞(锁等待),或自身执行计划慢。先查阻塞链,判断该「等它结束」还是「杀掉阻塞源」。

排查步骤

  1. 看当前所有请求与阻塞关系:
SELECT session_id, status, wait_type, blocking_session_id,
       command, login_name
FROM sys.dm_exec_requests WHERE blocking_session_id <> 0 OR session_id <> @@SPID;
  1. 追阻塞源头:
SELECT s.session_id, s.login_name, t.text
FROM sys.dm_exec_sessions s
CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) t
WHERE s.session_id = 阻塞源会话ID;
  1. 判断:
    • 阻塞源是长事务/大批量操作 → 评估业务影响后杀掉(KILL 会话ID);
    • 阻塞源是正常业务 → 等其结束,别硬杀;
    • 自身查询慢 → 取执行计划优化。
  2. 在 SSMS 活动会话视图或「进程活动」里可视化阻塞链。
  3. 版本执行计划能力以 SQL Server 2022 Developer 条目页核对。

现象对照表

现象 判断
有 blocking_session_id 被阻塞,追源头
wait_type 为锁等待类 锁竞争
无阻塞、单纯慢 执行计划问题

操作小结

  1. 先分清「被阻塞」还是「自身慢」。
  2. 杀会话前评估业务影响,源头比挂起者优先处理。
  3. 长事务是阻塞大户,从应用侧缩短事务。

相关链接

本文内容基于公开资料整理,仅供参考;涉及授权与合规的操作请以厂商官方文档为准。

相关推荐下载

按本文主题匹配的官方原版镜像条目

配套 PE 工具

制作启动盘、备份数据、修复引导

其他常见问题

同一集合内的相近主题,按标签与关键词匹配