এই ক্যোয়ারী কেন অচলাবস্থার কারণ?


11

এই ক্যোয়ারী কেন অচলাবস্থার কারণ?

UPDATE TOP(1) system_Queue SET
  [StatusID] = 2,
  @ID = InternalID
WHERE InternalID IN (
    SELECT TOP 1 
      InternalID FROM system_Queue
    WHERE IsOutGoing = @IsOutGoing AND StatusID = 1
ORDER BY MessageID ASC, InternalID ASC)

ডেডলক গ্রাফ যুক্ত হয়েছে:

<keylock hobtid="72057594236436480" dbid="9" objectname="Z.dbo.system_Queue" indexname="PK_system_Queue" id="lock5b25cc80" mode="X" associatedObjectId="72057594236436480">
    <owner-list>
     <owner id="processc6fe40" mode="X"/>
    </owner-list>
    <waiter-list>
     <waiter id="processc7b8e8" mode="S" requestType="wait"/>
    </waiter-list>
   </keylock>
   <keylock hobtid="72057594405453824" dbid="9" objectname="Z.dbo.system_Queue" indexname="IX_system_Queue_DirectionByStatus" id="lock48cf3180" mode="S" associatedObjectId="72057594405453824">
    <owner-list>
     <owner id="processc7b8e8" mode="S"/>
    </owner-list>
    <waiter-list>
     <waiter id="processc6fe40" mode="X" requestType="wait"/>
    </waiter-list>
   </keylock>

যোগ করেছেন:

এই ধরণের অচলাবস্থা কীভাবে এড়াতে হবে তার সমাধানের জন্য নিবন্ধটির জন্য ধন্যবাদকে ধন্যবাদ :

  • পাঠকের অভিক্ষেপ থেকে অপ্রয়োজনীয় কলামগুলি অপসারণ করুন যাতে তাকে ক্লাস্টারড সূচকটি সন্ধান করতে না হয়
  • সূচিটি আচ্ছাদন করার জন্য অ ক্লাস্টারযুক্ত সূচীতে প্রয়োজনীয় কলামগুলি অন্তর্ভুক্ত করুন, যাতে পাঠক ক্লাস্টারড সূচকটি না দেখে have
  • ক্লাস্টারবিহীন সূচক বজায় রাখতে হবে এমন আপডেটগুলি এড়িয়ে চলুন

আপনি কোন ডিবি প্ল্যাটফর্মের কোন সংস্করণ ব্যবহার করছেন? ডিফল্ট ট্র্যাক্স বিচ্ছিন্নতা (বা একত্রীকরণ) স্তরটি কী? বর্তমানে সিস্টেম_কিউ টেবিলে কোন সূচকগুলি বিদ্যমান?
এসকিউএলরকস্টার

ডেডলক গ্রাফের @ এসকিউএলরকস্টার অংশ যুক্ত হয়েছে, এসকিউএল সার্ভার ২০০৮
গারিক

@ এসকিউএলরকস্টার আইএক্স_সিস্টেম_কিউ_ডিশনবাইস্ট্যাটাস সূচকটি আইসআউটগইং এবং স্ট্যাটাসআইডি দ্বারা সূচক।
গারিক

উত্তর:


13

আমার কাছে মনে হচ্ছে যেন আপনি একই বিবৃতিতে এবং একই টেবিলে একটি নির্বাচন এবং একটি আপডেট করার চেষ্টা করছেন।

নির্বাচনটি আইএক্স_সিস্টেম_কিউ_ডিশনবাইস্ট্যাটাস সূচকের অভ্যন্তরের মানগুলিতে একটি ভাগ করা লক ধরে রেখেছে, এবং আপডেটগুলি এই তালাগুলির প্রকাশের আগে এটির এক্সক্লুসিভ লক পাওয়ার আগে এটি প্রাথমিক কী আপডেট করবে (যা আমি অনুমান করব যে এটি ক্লাস্টারযুক্ত এবং এছাড়াও অংশটির অংশ) IX_system_Queue_DirectionByStatus কী মান)।

যাইহোক, আমার অনুমান যে এই ক্যোয়ারীটি কেবলমাত্র বিরল সুযোগেই সফল হবে যে সূচকটি এটি নির্বাচন করে এবং আপডেট করছে তা বিরোধী নয়। আপনি যখন প্রত্যেকবার মৃত্যুদণ্ড কার্যকর করেন তখন কি তা অচল হয়ে পড়েছে (আমি ধরে নিই যে এটি হবে)।

এখানে একটি লিঙ্ক আছে যা আরো বিস্তারিত ডেডলক ব্যাখ্যা হল: http://sqlblog.com/blogs/jonathan_kehayias/archive/2008/07/30/the-anatomy-of-a-deadlock.aspx


বিঙ্গো! ধন্যবাদ. অচলাবস্থার জন্য আমি সত্যিই আজব পরিস্থিতি দেখেছি। তোমার উত্তরের জন্য ধন্যবাদ.
গারিক

6

আমি আশা করি আপনি এই পোস্টটিকে উত্তর হিসাবে চিহ্নিত করবেন না তবে এই বিষয়টিতে অন্যান্য এসকিউএল সার্ভার বিশেষজ্ঞরা এখানে আরও তথ্য ভাগ করে নেবেন।

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/01/01/reproducing-deadlocks-involving-only-one-table.aspx

http://rusanu.com/2009/05/16/readwrite-deadlock/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.