Como eu estava depurando um deadlock, notei que no xml's resource-list
, o primeiro e o terceiro lock de objeto são os mesmos. Existe alguma razão para isso?
A <resource-list>
literalidade:
<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>
Não é o mesmo. Se você olhar mais de perto, o "id do proprietário" é diferente. Este é o bloqueio 'Modificação de esquema'. O SQL Server permite apenas um bloqueio de modificação de esquema.
No primeiro é de propriedade
process194df0e5468
e é concedido. No terceiro, é solicitado porprocess1947a066ca8
e aguardando, pois o primeiro já possui o bloqueio.Esta é uma boa leitura sobre este bloqueio por Michael J.Swart.