Aşağıdaki formun SQL ile paralel ve SQL ile çalışan iki Execute SQL Görevleri kullanarak boş bir yığın tabloya en az günlük kaydı kullanarak iki veri kümesi ekliyordu.
INSERT INTO Table (TABLOCK) SELECT FROM ...
İş biraz askıda kaldıktan sonra, SQL görevlerinden biri çıkmaz kurban oldu. Kilitlenme grafiğinin XML çıktısı aşağıdadır.
Birisi kaputun altında neler olduğunu açıklayabilir mi?
<resource-list>
<objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746">
<owner-list>
<owner id="process9609dc8" mode="Sch-S"/>
<owner id="process9609dc8" mode="IX"/>
</owner-list>
<waiter-list>
<waiter id="process5e13048" mode="X" requestType="convert"/>
</waiter-list>
</objectlock>
<objectlock lockPartition="0" objid="1586156746" subresource="FULL" dbid="7" objectname="dbo.TargetTable" id="lock7374a00" mode="IX" associatedObjectId="1586156746">
<owner-list>
<owner id="process5e13048" mode="Sch-S"/>
<owner id="process5e13048" mode="IX"/>
</owner-list>
<waiter-list>
<waiter id="process9609dc8" mode="X" requestType="convert"/>
</waiter-list>
</objectlock>
</resource-list>
Çoğu durumda iki Execute SQL Görevinin başarılı bir şekilde paralel çalışabileceğini bulduğum için işler çok daha karmaşıklaşıyor. Aşağıdan deneyin:
Create table dbo.TablockInsert (c1 int, c2 int, c3 int)
--then issue the script in two Execute Sql Task in parallel you won't fail:
insert into dbo.TablockInsert(TABLOCK) SELECT 1, 1, 1
Tek fark SELECT ... FROM ... ifadesi olduğundan, SELECT ... FROM ... ifadesinin burada kilit modu üzerinde bir etkisi olabilir mi?