如何验证设置READ UNCOMMITTED的查询未产生锁?
验证READ UNCOMMITTED查询是否产生锁的方法
利用现成经典存储过程快速验证
用Brent Ozar的
sp_BlitzLock查看全局锁状态
直接执行:EXEC sp_BlitzLock;先通过
sp_WhoIsActive拿到目标查询的会话ID,再在sp_BlitzLock的结果里匹配该会话。如果找不到对应会话的锁记录,或只有不会造成阻塞的轻量级锁,说明没产生问题锁。用Adam Mechanic的
sp_WhoIsActive精准定位会话锁
执行时开启锁信息展示:EXEC sp_WhoIsActive @show_locks = 1;找到目标查询对应的行,查看
locks列——如果是空值,或者只有SCH-S(共享架构锁,不影响其他操作)这类锁,就没问题。READ UNCOMMITTED级别下本就不会持有行/页级共享锁,要是这里出现S模式的行锁,才说明操作存在异常。
直接查询系统视图做底层验证
替换下面的@YourSessionID为目标查询的会话ID,执行:
DECLARE @YourSessionID INT = 123; -- 替换为你的查询会话ID SELECT resource_type, request_mode, request_status FROM sys.dm_tran_locks WHERE request_session_id = @YourSessionID;
如果结果为空,或者只有resource_type = 'DATABASE'且request_mode = 'S'的数据库共享锁(所有查询都会持有的基础锁,不会造成阻塞),就说明该查询没产生需要担心的锁。
内容的提问来源于stack exchange,提问作者J. Mini
相关产品推荐
相关产品推荐

