최소한의 로깅을 사용하여 두 개의 데이터 세트를 병렬로 실행되는 두 개의 SQL 실행 태스크와 다음 형식의 SQL을 사용하여 빈 힙 테이블에 삽입했습니다.
INSERT INTO Table (TABLOCK) SELECT FROM ...
작업이 약간 중단 된 후 SQL 태스크 중 하나가 교착 상태의 희생자가되었습니다. 다음은 교착 상태 그래프의 XML 출력입니다.
누군가 후드 아래에서 무슨 일이 있었는지 설명 할 수 있습니까?
<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>
대부분의 경우 두 개의 SQL 실행 작업이 병렬로 성공적으로 실행될 수 있다는 것을 알았 기 때문에 상황이 훨씬 까다로워졌습니다. 아래에서 시도하십시오 :
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
유일한 차이점은 SELECT ... FROM ... 문이므로 SELECT ... FROM ... 문은 잠금 모드에 영향을 줄 수 있습니까?