เหตุใดแบบสอบถามนี้ทำให้เกิดการหยุดชะงัก
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>
เพิ่ม:
ขอบคุณSankarสำหรับบทความที่มีวิธีแก้ปัญหาการหยุดชะงักประเภทนี้:
- กำจัดคอลัมน์ที่ไม่จำเป็นออกจากการฉายของผู้อ่านดังนั้นเขาไม่จำเป็นต้องค้นหาดัชนีคลัสเตอร์
- เพิ่มคอลัมน์ที่ต้องการตามคอลัมน์ที่มีอยู่ในดัชนีที่ไม่ทำคลัสเตอร์เพื่อสร้างดัชนีครอบคลุมอีกครั้งเพื่อให้ผู้อ่านไม่ได้ค้นหาดัชนีคลัสเตอร์
- หลีกเลี่ยงการอัพเดตที่ต้องรักษาดัชนีที่ไม่ทำคลัสเตอร์