আমি দুটি ডেটা সেট সন্নিবেশ করছিলাম, ন্যূনতম লগিং ব্যবহার করে, খালি হিপ টেবিলটিতে দুটি এক্সিকিউট এসকিউএল টাস্কের মাধ্যমে সমান্তরালভাবে এবং নিম্নলিখিত ফর্মের এসকিউএল সহ চলমান।
INSERT INTO Table (TABLOCK) SELECT FROM ...
কাজটি কিছুটা স্তব্ধ হয়ে যাওয়ার পরে, এসকিউএল-এর একটি কার্য অচল হয়ে পড়েছিল dead নীচে ডেডলক গ্রাফের এক্সএমএল আউটপুট রয়েছে।
হুডের নীচে কী ঘটছে তা কেউ ব্যাখ্যা করতে পারেন?
<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>
জিনিসগুলি অনেক কৌশলযুক্ত হয় কারণ আমি দেখেছি বেশিরভাগ ক্ষেত্রে দুটি কার্যকর এসকিউএল কার্য সফলভাবে সমান্তরালে চলতে পারে। নীচে চেষ্টা করুন:
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
যেহেতু পার্থক্য কেবলমাত্র নির্বাচন ... FROM ... বিবৃতি, নির্বাচন থেকে নির্বাচন করুন ... FROM ... বিবৃতি এখানে লক মোডে প্রভাব ফেলতে পারে?