SQL Server中的负SPID?

时间:2013-05-08 08:01:02

标签: sql sql-server locking

我正在尝试查找并终止在其中一个表上设置锁定的会话,并阻止许多其他查询执行。为此,我使用以下脚本:

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'))

我得到的结果集如下:

enter image description here

运行EXEC sp_who2不会返回任何带有负SPID的行。如何找到锁定我的表的会话?

2 个答案:

答案 0 :(得分:5)

sys.dm_tran_lockREQUEST_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 运行框中键入 dcomcnfgenter image description here

enter image description here

您可以使用以下查询在 ssms 中找到负面会话。

使用大师; 去

选择 DISTINCT(request_owner_guid) 作为 UoW_Guid 从 sys.dm_tran_locks WHERE request_session_id =-2 去

enter image description here

你在 ssms 中提到了 GUID。

SSMS:- 杀死“GUID”

blocking_session_id 阻止请求的会话的 ID。如果此列为NULL,则请求未被阻塞,或者阻塞会话的会话信息不可用(或无法识别)。

-2 = 阻塞资源由孤立的分布式事务所有。

-3 = 阻塞资源归延迟恢复事务所有。

-4 = 由于内部闩锁状态转换,此时无法确定阻塞闩锁所有者的会话 ID。

UOW 值,这将返回一个 32 位的 UOW 编号