死锁 xml 上的重复资源

Geo*_*tis 4 sql-server deadlock

当我调试死锁时,我注意到在 xml 中resource-list,第一个和第三个对象锁是相同的。这有什么原因吗?

逐字逐句<resource-list>

 <resource-list>
  <objectlock lockPartition="0" objid="580509447" subresource="FULL" dbid="7" objectname="censoredV2.dbo.pt_sales" id="lock1929b2d5500" mode="Sch-M" associatedObjectId="580509447">
   <owner-list>
    <owner id="process194df0e5468" mode="Sch-M" />
   </owner-list>
   <waiter-list>
    <waiter id="process1947a066ca8" mode="Sch-M" requestType="wait" />
   </waiter-list>
  </objectlock>
  <objectlock lockPartition="0" objid="94623380" subresource="FULL" dbid="7" objectname="censoredV2.dbo.pt" id="lock1929a8cf480" mode="IX" associatedObjectId="94623380">
   <owner-list>
    <owner id="process1907da684e8" mode="IX" />
   </owner-list>
   <waiter-list>
    <waiter id="process194df0e5468" mode="Sch-M" requestType="wait" />
   </waiter-list>
  </objectlock>
  <objectlock lockPartition="0" objid="580509447" subresource="FULL" dbid="7" objectname="censoredV2.dbo.pt_sales" id="lock1929b2d5500" mode="Sch-M" associatedObjectId="580509447">
   <owner-list>
    <owner id="process1947a066ca8" mode="Sch-M" requestType="wait" />
   </owner-list>
   <waiter-list>
    <waiter id="process1907da684e8" mode="IX" requestType="wait" />
   </waiter-list>
  </objectlock>
 </resource-list>
Run Code Online (Sandbox Code Playgroud)

Sql*_*ide 6

这是不一样的。如果您仔细观察,“所有者 ID”是不同的。这是“架构修改”锁。SQL Server 只允许一种架构修改锁。

在第一个上,它被拥有process194df0e5468并被授予。在第三个上,它被请求并process1947a066ca8等待,因为第一个已经拥有锁。

读完Michael J.Swart 写的关于这把锁的文章很不错。