Sql server sql_who2在BlkBy列中给出-2

Sql server sql_who2在BlkBy列中给出-2,sql-server,locking,Sql Server,Locking,今天,我们的dev服务器出现了一个问题,其中一个进程锁定了一个表,停止了该表上的所有其他查询。运行sql\u who2时,blkBy列的值为-2,但-2不在进程列表中 运行DBCC INPUTBUFFER(-2)时,我得到了指定的异常无效SPID-2 运行时,我看到它锁定的所有表和索引,但所有其他信息都为null,除了ownertype是Transaction 当重新启动webapp时(web.config中做了更改),锁被解除,并且-2 SPID的所有痕迹也被解除 我的问题是,为什么SPID是

今天,我们的dev服务器出现了一个问题,其中一个进程锁定了一个表,停止了该表上的所有其他查询。运行
sql\u who2
时,blkBy列的值为-2,但-2不在进程列表中

运行
DBCC INPUTBUFFER(-2)
时,我得到了指定的异常无效SPID-2

运行时,我看到它锁定的所有表和索引,但所有其他信息都为null,除了ownertype是Transaction

当重新启动webapp时(web.config中做了更改),锁被解除,并且-2 SPID的所有痕迹也被解除


我的问题是,为什么SPID是负值,为什么我不能获取有关它的任何信息?

SPID为-2表示进程被孤立的分布式事务阻塞

您可以使用
KILL'GUID-OF-THE-UOW'
终止孤立的分布式事务或任何其他分布式事务。为此,您需要从
sys.dm\u tran\u locks.request\u owner\u GUID
获取工作单元(UOW)的GUID

SELECT
    [tl].[request_owner_guid]
FROM
    sys.dm_tran_locks   tl
WHERE
    [tl].[request_session_id] = -2

-2只是一种人为的联想。会话ID为-2,通过查询动态管理视图中的会话ID列,可以更容易地识别孤立事务。

SPID为-2表示进程被孤立的分布式事务阻止

您可以使用
KILL'GUID-OF-THE-UOW'
终止孤立的分布式事务或任何其他分布式事务。为此,您需要从
sys.dm\u tran\u locks.request\u owner\u GUID
获取工作单元(UOW)的GUID

SELECT
    [tl].[request_owner_guid]
FROM
    sys.dm_tran_locks   tl
WHERE
    [tl].[request_session_id] = -2

-2只是一种人为的联想。会话ID-2只是通过查询动态管理视图中的会话ID列,更容易识别孤立事务。

Thx!您知道如何找到分布式事务的源吗?有任何信息吗?您应该能够通过在开始>运行时键入“dcomcnfg”来打开Microsoft分布式事务协调器MMC管理单元。。。对话在本地DTC节点下,查找已标记为可疑的交易。很可能此事务来自远程服务器。Thx!您知道如何找到分布式事务的源吗?有任何信息吗?您应该能够通过在开始>运行时键入“dcomcnfg”来打开Microsoft分布式事务协调器MMC管理单元。。。对话在本地DTC节点下,查找已标记为可疑的交易。此事务可能来自远程服务器。