来自不同进程的相同临时表上的锁的死锁
我发现一个死锁似乎显示出我认为不可能的事情。死锁涉及两个过程: 1. process8cf948 SPID 63 在临时表#PB_Cost_Excp_Process_Invoices_Work上执行ALTER TABLE。 拥有对象ID 455743580的表#PB_Cost_Excp_Process_Invoices_Work上的IX锁 2. process4cb3708 SPID 72 在UPDATE上对临时表#PB_Cost_Excp_Process_Invoices_Work进行执行,该表应该是它自己的表的唯一副本。 在#PB_Cost_Excp_Process_Invoices_Work上拥有具有相同对象ID 455743580的 Sch-M锁! 这应该是不可能的。我想念什么吗?#Temporary表是否真的在这两个SPID之间重用? 这是在具有累积更新1(版本10.50.4260)的SQL Server 2008 R2 Service Pack 2上。 完整的未更改死锁跟踪如下。请注意,两个进程如何在具有相同表名#PB_Cost_Excp_Process_Invoices_Work_SNIP_0000000D8519的相同对象ID上进行操作: 12/14/2012 13:46:03,spid23s,Unknown,waiter id=process8cf948 mode=X requestType=wait 12/14/2012 13:46:03,spid23s,Unknown,waiter-list 12/14/2012 13:46:03,spid23s,Unknown,owner id=process4cb3708 mode=Sch-M 12/14/2012 13:46:03,spid23s,Unknown,owner-list 12/14/2012 13:46:03,spid23s,Unknown,objectlock lockPartition=0 objid=455743580 subresource=FULL dbid=2 objectname=tempdb.dbo.#PB_Cost_Excp_Process_Invoices_Work_________________________________________________________________________________0000000D8519 id=lock371705d00 mode=Sch-M associatedObjectId=455743580 12/14/2012 …