Sql-Server

死鎖xml上的重複資源

  • March 14, 2022

在調試死鎖時,我注意到在 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>

這是不一樣的。如果您更仔細地查看它,“所有者 ID”是不同的。這是“模式修改”鎖。SQL Server 只允許一個架構修改鎖。

在第一個上,它由process194df0e5468它所有並被授予。在第三個中,它被請求process1947a066ca8並等待,因為第一個已經擁有鎖。

這是Michael J.Swart 關於這把鎖的好讀物。

引用自:https://dba.stackexchange.com/questions/308693