1

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

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 的行。如何找到锁定我的桌子的会话?

4

2 回答 2

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 可以更轻松地识别孤立事务。

于 2013-05-08T08:09:31.087 回答
1

负牵引力 :当某人被分布式事务 SPID 杀死时,就会发生负 SPID。完全准确的孤立分布式事务 SPID。

通过在服务器上的 Windows 运行框中 键入dcomcnfg来组件服务。在此处输入图像描述

在此处输入图像描述

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

使用大师;去

SELECT DISTINCT(request_owner_guid) as UoW_Guid FROM sys.dm_tran_locks WHERE request_session_id =-2 GO

在此处输入图像描述

你已经在 ssms 中杀死了提及 GUID。

SSMS:- 杀死'GUID'

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

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

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

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

UOW 值,这将返回一个 32 位的 UOW 数字

于 2021-02-02T18:10:44.213 回答