SQL Server 查看和解除表锁的常用方法

一颗松果
一颗松果
发布时间:2026-10-13| 3人浏览过
原创

SQL Server 运行时常遇表锁定导致查询阻塞。本文介绍利用 sys.dm_tran_locks 等视图定位占用表的会话(spid),并通过 Kill 命令终止特定进程以快速解除表锁的操作方法。

为什么需要手动解锁?

在关系型数据库中,事务执行期间若持有排他锁且未提交或回滚,会导致其他请求该数据的进程挂起。虽然最佳实践是优化事务逻辑、缩短事务持有时间或降低隔离级别,但在排查线上故障时,识别并终止异常的长驻锁是恢复服务可用的有效手段。

查看被锁表的方法

要找到“谁锁了哪张表”,通常关注发起锁请求的会话 ID (request_session_id) 以及目标对象名称。

第 1 步:查询当前持有 OBJECT 级锁的对象

目的:直接列出当前正在对表对象加锁的会话 ID 及表名。
入口:SSMS 查询窗口或客户端连接。
参数:筛选 resource_type='OBJECT'。
完成状态:结果集中包含 spid (即 request_session_id) 和 tableName。

select request_session_id as spid,
       OBJECT_NAME(resource_associated_entity_id) as tableName 
from sys.dm_tran_locks 
where resource_type = 'OBJECT'

其中:
spid:锁表的进程 ID。
tableName:被锁定的表名。

第 2 步:排除自身并指定数据库

目的:针对特定业务库,过滤掉当前查询所在的上下文会话。
入口:SSMS 查询窗口。
重要参数:将 '数据库名称' 替换为实际库名。
完成状态:返回非本会话且在指定库内产生等待/锁的进程列表。

select spId
from master..SysProcesses
where db_Name(dbID) = '数据库名称'
  and spId <> @@SpId
  and dbID <> 0
 

解除(Kill)表锁的操作

锁定源于某个具体的 Session。一旦确认了异常连接的 spid,可以通过终结该会话来强制释放其持有的锁。请注意:此操作会中断该客户端的连接,正在进行的任何事务都将回滚。

第 3 步:构造并执行 Kill 命令

目的:向 SQL Server 发送终止进程指令。
入口:新的查询窗口(切勿在被锁的同一个连接中执行)。
参数:将 @spid 设置为上一步获取到的具体进程号(如 57)。
风险提示:操作前请评估是否影响关键业务。

declare @spid int 
Set @spid = 57 -- 替换为实际的锁表进程号

-- 动态构建 Kill 字符串
set @sql = 'kill ' + cast(@spid as varchar(10))
exec(@sql)

对于部分环境也支持直接在查询中使用 EXEC ('Kill '+cast(@spid as varchar)) 的形式,但显式声明变量方式更易控制类型转换。

以上就是 SQL Server 查看和解除表锁的详细内容,更多关于 SQL Server 性能调优的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。