อินสแตนซ์นี้โฮสต์ฐานข้อมูล SharePoint 2007 (SP) เราประสบปัญหาการหยุดชะงัก SELECT / INSERT จำนวนมากต่อตารางที่ใช้งานหนักจำนวนหนึ่งในฐานข้อมูลเนื้อหา SP ฉัน จำกัด ทรัพยากรที่เกี่ยวข้องให้แคบลงกระบวนการทั้งสองต้องการล็อคในดัชนีที่ไม่ใช่คลัสเตอร์
INSERT ต้องการล็อค IX บนทรัพยากร SELECT และ SELECT ต้องการล็อค S บนทรัพยากร INSERT กราฟเดดล็อกแสดงให้เห็นและสามทรัพยากร 1. ) สองรายการจาก SELECT (เธรดขนานผู้ผลิต / ผู้บริโภค) และ 2) INSERT
ฉันได้แนบกราฟการหยุดชะงักเพื่อตรวจสอบของคุณ เนื่องจากนี่คือรหัส Microsoft และโครงสร้างตารางเราไม่สามารถทำการเปลี่ยนแปลงใด ๆ
อย่างไรก็ตามฉันได้อ่านบนเว็บไซต์ MSFT SP ว่าพวกเขาแนะนำให้ตั้งค่าตัวเลือกการกำหนดค่าระดับอินสแตนซ์ MAXDOP เป็น 1 เนื่องจากอินสแตนซ์นี้มีการใช้งานร่วมกันระหว่างฐานข้อมูล / แอปพลิเคชันอื่น ๆ อีกมากมาย
ดังนั้นฉันตัดสินใจลองและป้องกันคำสั่ง SELECT เหล่านี้ไม่ให้ขนานกัน ฉันรู้ว่านี่ไม่ใช่วิธีแก้ปัญหา แต่เป็นการแก้ไขชั่วคราวเพิ่มเติมเพื่อช่วยแก้ไขปัญหา ดังนั้นฉันจึงเพิ่ม“ เกณฑ์ต้นทุนสำหรับความเท่าเทียม” จากมาตรฐานของเราที่ 25 ถึง 40 เมื่อทำเช่นนั้นแม้ว่าภาระงานจะไม่เปลี่ยนแปลง (SELECT / INSERT ที่เกิดขึ้นบ่อยครั้ง) การหยุดชะงักได้หายไป คำถามของฉันคือทำไม
SPID 356 INSERT มีการล็อก IX บนเพจที่เป็นของดัชนีที่ไม่ใช่คลัสเตอร์
SPID 690 SELECT ID การดำเนินการ 0 มีการล็อก S บนหน้าของดัชนีที่ไม่ใช่คลัสเตอร์เดียวกัน
ตอนนี้
SPID 356 ต้องการล็อก IX บนทรัพยากร SPID 690 แต่ไม่สามารถรับได้เพราะ SPID 356 กำลังถูกบล็อกโดย SPID 690 รหัสการดำเนินการ 0 ล็อค S
SPID 690 รหัสการดำเนินการ 1 ต้องการล็อค S บนทรัพยากร SPID 356 แต่ไม่สามารถรับได้เพราะ SPID 690 รหัสการดำเนินการ 1 กำลังถูกบล็อคโดย SPID 356 และตอนนี้เรามีการหยุดชะงัก
แผนปฏิบัติการสามารถพบได้ใน SkyDrive ของฉัน
รายละเอียดการหยุดชะงักเต็มสามารถดูได้ที่นี่
หากใครบางคนสามารถช่วยฉันเข้าใจว่าทำไมฉันจะขอบคุณมันจริงๆ
ตาราง EventReceivers
Id uniqueidentifier ไม่มี 16
ชื่อ nvarchar ไม่มี 512
SiteId uniqueidentifier ไม่มี 16
WebId uniqueidentifier ไม่มี 16
hostid uniqueidentifier ไม่มี 16
HostType int ไม่มี 4
Itemid int ไม่มี 4
dirname nvarchar ไม่มี 512
LeafName nvarchar ไม่มี 256
ชนิด int ไม่มี 4
sequenceNumber int ที่ 4
สภา nvarchar ไม่มี 512
ชั้น nvarchar no 512
Data nvarchar no 512
ตัวกรอง nvarchar no 512
SourceId tContentTypeId no 512
SourceType int no 4
ข้อมูลประจำตัว int 4 ไม่มี
ContextType varbinary 16
ContextEventType varbinary ไม่มี 16
varbinary ContextId ไม่มี 16
ContextObjectId varbinary ไม่มี 16
ContextCollectionId varbinary ไม่มี 16
index_name index_description index_keys
EventReceivers_ByContextCollectionId nonclustered ตั้งอยู่บนหลัก SiteId, ContextCollectionId
EventReceivers_ByContextObjectId nonclustered ตั้งอยู่บนหลัก SiteId, ContextObjectId
EventReceivers_ById nonclustered ที่ไม่ซ้ำกันตั้งอยู่บนหลัก SiteId, Id
EventReceivers_ByTarget คลัสเตอร์ที่ไม่ซ้ำกันตั้งอยู่บนหลัก SiteId, WebId, hostid, HostType, ประเภท ContextCollectionId, ContextObjectId, ContextId, ContextType, ContextEventType, SequenceNumber, แอสเซมบลี, คลาส
EventReceivers_IdUnique คีย์ที่ไม่ซ้ำกันที่ไม่ซ้ำกันของคลัสเตอร์ซึ่งตั้งอยู่บน Primary Id
proc_InsertEventReceiver
และproc_InsertContextEventReceiver
ทำอย่างนั้นเราไม่เห็นใน XDL นอกจากนี้เพื่อลดความเท่าเทียมกันทำไมไม่เพียงส่งผลกระทบต่อคำสั่งเหล่านี้โดยตรง (โดยใช้ MAXDOP 1) แทนที่จะส่งต่อด้วยการตั้งค่าทั่วทั้งเซิร์ฟเวอร์