इस क्वेरी में गतिरोध क्यों होता है?
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>
जोड़े गए:
धन्यवाद शंकर लेख समाधान कैसे गतिरोध के इस प्रकार से बचने के लिए किया है कि के लिए:
- पाठक के प्रक्षेपण से अनावश्यक स्तंभों को खत्म करना ताकि उसे गुच्छेदार सूचकांक को देखना न पड़े
- अनुक्रमणिका को आच्छादित करने के लिए गैर-क्लस्टर किए गए अनुक्रमणिका में समाहित कॉलम के रूप में आवश्यक कॉलम जोड़ें, ताकि पाठक को क्लस्टर किए गए इंडेक्स पर नज़र न पड़े
- उन अपडेट से बचें, जिन्हें नॉन-क्लस्टर्ड इंडेक्स मेंटेन करना है