我正在尝试查找并终止在其中一个表上设置锁定的会话,并阻止许多其他查询执行。为此,我使用以下脚本:
SELECT REQUEST_MODE, REQUEST_TYPE, REQUEST_SESSION_ID
FROM sys.dm_tran_locks
WHERE RESOURCE_TYPE = 'OBJECT'
AND RESOURCE_ASSOCIATED_ENTITY_ID =(SELECT OBJECT_ID('System'))
我得到的结果集如下:
运行EXEC sp_who2
不会返回任何带有负SPID的行。如何找到锁定我的表的会话?
答案 0 :(得分:5)
sys.dm_tran_lock
,REQUEST_SESSION_ID
:
值-2表示请求属于孤立的分布式事务。
因此,这里不再存在实际的会话ID。阅读这些评论应该会引导您KILL
:
使用KILL UOW 终止孤立的分布式事务。这些事务与任何真实会话ID无关,而是与会话ID =' - 2'人为关联。通过查询sys.dm_tran_locks,sys.dm_exec_sessions或sys.dm_exec_requests动态管理视图中的会话ID列,此会话ID可以更轻松地识别孤立事务。
答案 1 :(得分:1)
负面牵引力如何: 当有人杀死分布式事务 SPID 时,就会发生负 SPID。完全精确的孤立分布式事务 SPID。
组件服务,通过在服务器上的 Windows 运行框中键入 dcomcnfg。
使用大师; 去
选择 DISTINCT(request_owner_guid) 作为 UoW_Guid 从 sys.dm_tran_locks WHERE request_session_id =-2 去
SSMS:- 杀死“GUID”
blocking_session_id 阻止请求的会话的 ID。如果此列为NULL,则请求未被阻塞,或者阻塞会话的会话信息不可用(或无法识别)。
-2 = 阻塞资源由孤立的分布式事务所有。
-3 = 阻塞资源归延迟恢复事务所有。
-4 = 由于内部闩锁状态转换,此时无法确定阻塞闩锁所有者的会话 ID。
UOW 值,这将返回一个 32 位的 UOW 编号