Sql-Server
死鎖xml上的重複資源
在調試死鎖時,我注意到在 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 關於這把鎖的好讀物。