我正在尝试跟踪我们的 SQL 2005 数据库(64 位)中发生的死锁。我们目前没有启用快照隔离。
我打开了 tf-1204 并收到了下面的输出。
从这个输出中,我能够确定节点 1 是一个存储过程,它选择数据并且只修改 #temp 表中的值。
节点 2 是另一个存储过程,它对单行数据执行基于简单主键的更新。
我无法确定的是这里争用的实际资源。10:72057594060734464 和 10:72057594038910976 的 Keys 允许我确定数据库,但是无法使用 object_name 解析这些对象 ID。事实上,它们应该是 int 值,所以我不确定这些大数字是从哪里来的。
在研究这个问题时,我也能够从对象 ID 的活动监视器中获得类似的值。
如何解析这些对象标识符?
这是死锁 tf-1204 输出:
2008-12-05 07:48:28.19 spid4s ---------------------------------- 2008-12-05 07:48:28.19 spid4s 开始死锁搜索 634 2008-12-05 07:48:28.19 spid4s 目标资源所有者: 2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) 值:0x1043f980 2008-12-05 07:48:28.19 spid4s 0:插入新节点:节点:1 ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598)值: 0x1043f980 2008-12-05 07:48:28.19 spid4s 1:SearchOR 考虑新的拦截器 - 任务:0000000000EC5198,工人 00000000C89881C0 2008-12-05 07:48:28.19 spid4s 2:插入新节点:节点:2 ResType:LockOwner Stype:'OR'Xdes:0x00000000808F1A80 模式:S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598)值: 0x1063d000 2008-12-05 07:48:28.19 spid4s 3:SearchOR 考虑新的拦截器 - 任务:0000000000C3FC18,工人 00000000F847C1C0 2008-12-05 07:48:28.19 spid4s 4:InsertKnown Cycle found between old res owner: [ ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598)值:0x1043f980] 和新资源所有者 [ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) 值:0x1043f980] 2008-12-05 07:48:28.19 spid4s 4:InsertKnown 搜索结果:发现死锁(阻塞所有者在堆栈上) 2008-12-05 07:48:28.19 spid4s 3:SearchOR 搜索结果:发现死锁(循环在此级别或之前) 2008-12-05 07:48:28.19 spid4s 1:SearchOR 搜索结果:发现死锁(循环在此级别或之前) 2008-12-05 07:48:28.19 spid4s 2008-12-05 07:48:28.19 spid4s 遇到死锁循环 .... 验证循环 2008-12-05 07:48:28.19 spid4s 0:插入新节点:节点:1 ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598)值: 0x1043f980 成本:(0/1544) 2008-12-05 07:48:28.19 spid4s 1:SearchOR 考虑新的拦截器 - 任务:0000000000EC5198,工人 00000000C89881C0 2008-12-05 07:48:28.19 spid4s 2:插入新节点:节点:2 ResType:LockOwner Stype:'OR'Xdes:0x00000000808F1A80 模式:S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598)值: 0x1063d000 成本:(0/0) 2008-12-05 07:48:28.19 spid4s 3:SearchOR 考虑新的拦截器 - 任务:0000000000C3FC18,工人 00000000F847C1C0 2008-12-05 07:48:28.19 spid4s 4:InsertKnown Cycle found between old res owner: [ ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598)值:0x1043f980 成本:(0/1544)] 和新资源所有者 [ ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598)值:0x1043f980 成本:( 0/1544)] 2008-12-05 07:48:28.19 spid4s 4:InsertKnown 搜索结果:发现死锁(阻塞所有者在堆栈上) 2008-12-05 07:48:28.19 spid4s 3:SearchOR 搜索结果:发现死锁(循环在此级别或之前) 2008-12-05 07:48:28.19 spid4s 1:SearchOR 搜索结果:发现死锁(循环在此级别或之前) 2008-12-05 07:48:28.19 spid4s 遇到死锁 .... 打印死锁信息 2008-12-05 07:48:28.19 spid4s 等待图 2008-12-05 07:48:28.19 spid4s 2008-12-05 07:48:28.19 spid4s 节点:1 2008-12-05 07:48:28.19 spid4s 密钥:10:72057594060734464(c80089667602)CleanCnt:3 模式:S 标志:0x0 2008-12-05 07:48:28.19 spid4s 授予列表 1: 2008-12-05 07:48:28.19 spid4s 所有者:0x000000011063CDC0 模式:S Flg:0x0 参考:1 寿命:00000000 SPID:79 ECID:0 XactLockInfo:0x00000000808F1AB8 2008-12-05 07:48:28.19 spid4s SPID: 79 ECID: 0 语句类型: INSERT Line #: 220 2008-12-05 07:48:28.19 spid4s 输入缓冲区:RPC 事件:过程 [数据库 ID = 10 对象 ID = 1751794144] 2008-12-05 07:48:28.19 spid4s 请求者: 2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000813B8700 模式:X SPID:77 BatchID:0 ECID:0 TaskProxy:(0x00000000CE6D8598) 值:0x1043f980 成本:(0/1544) 2008-12-05 07:48:28.19 spid4s 2008-12-05 07:48:28.19 spid4s 节点:2 2008-12-05 07:48:28.19 spid4s 密钥:10:72057594038910976 (0c0092f62b82) CleanCnt:2 模式:X 标志:0x0 2008-12-05 07:48:28.19 spid4s 授予列表 0: 2008-12-05 07:48:28.19 spid4s 所有者:0x000000011043F300 模式:X Flg:0x0 参考:0 寿命:02000000 SPID:77 ECID:0 XactLockInfo:0x00000000813B8738 2008-12-05 07:48:28.19 spid4s SPID:77 ECID:0 语句类型:更新行号:23 2008-12-05 07:48:28.19 spid4s 输入缓冲区:RPC 事件:过程 [数据库 ID = 10 对象 ID = 1791462302] 2008-12-05 07:48:28.19 spid4s 请求者: 2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000808F1A80 模式:S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598) 值:0x1063d000 成本:(0/0) 2008-12-05 07:48:28.19 spid4s 2008-12-05 07:48:28.19 spid4s 受害者资源所有者: 2008-12-05 07:48:28.19 spid4s ResType:LockOwner Stype:'OR'Xdes:0x00000000808F1A80 模式:S SPID:79 BatchID:0 ECID:0 TaskProxy:(0x0000000129E82598) 值:0x1063d000 成本:(0/0) 2008-12-05 07:48:28.19 spid4s 结束死锁搜索 634 ... 发现死锁。 2008-12-05 07:48:28.19 spid4s ----------------------------------