เรามีกระบวนการที่สร้างรายงานสินค้าคงคลัง ในฝั่งไคลเอ็นต์กระบวนการแยกจำนวนเธรดผู้ปฏิบัติงานที่สามารถกำหนดค่าได้เพื่อสร้างกลุ่มข้อมูลสำหรับรายงานที่สอดคล้องกับที่เก็บหนึ่งแห่งจากหลาย ๆ ที่ (อาจเป็นพันหลายสิบโดยทั่วไป) เธรดผู้ปฏิบัติงานแต่ละคนเรียกบริการเว็บที่ดำเนินการตามขั้นตอนที่เก็บไว้
กระบวนการฐานข้อมูลสำหรับการประมวลผลแต่ละกลุ่มรวบรวมข้อมูลลงในตาราง #Temporary ในตอนท้ายของแต่ละชิ้นประมวลผลข้อมูลจะถูกเขียนไปยังตารางถาวรใน tempdb ในที่สุดเมื่อสิ้นสุดกระบวนการหนึ่งเธรดที่ฝั่งไคลเอ็นต์ร้องขอข้อมูลทั้งหมดจากตาราง tempdb ถาวร
ยิ่งผู้ใช้ที่เรียกใช้รายงานนี้ยิ่งได้รับช้า ฉันวิเคราะห์กิจกรรมในฐานข้อมูล ณ จุดหนึ่งฉันเห็นคำขอ 35 รายการที่ถูกบล็อกทั้งหมดถูกบล็อก ณ จุดหนึ่งในกระบวนการ SPIDs ทั้งหมดเหล่านี้ได้ในคำสั่งของ 50 มิลลิวินาทีรอประเภททรัพยากรLATCH_EX
METADATA_SEQUENCE_GENERATOR (00000010E13CA1A8)
SPID หนึ่งมีทรัพยากรนี้และอื่น ๆ ทั้งหมดกำลังบล็อก ฉันไม่พบสิ่งใดเกี่ยวกับทรัพยากรการรอนี้ในการค้นหาเว็บ
ตารางใน tempdb ที่เราใช้อยู่มีIDENTITY(1,1)
คอลัมน์ SPID เหล่านี้กำลังรอคอลัมน์ประจำตัวหรือไม่ เราสามารถใช้วิธีการใดในการลดหรือกำจัดการบล็อก
เซิร์ฟเวอร์เป็นส่วนหนึ่งของคลัสเตอร์ เซิร์ฟเวอร์กำลังเรียกใช้ SQL Server 2012 Standard Edition SP1 64 บิตใน Windows 2008 R2 Enterprise 64 บิต เซิร์ฟเวอร์มีตัวประมวลผล 64 GB และ 48 แต่ฐานข้อมูลสามารถใช้ 16 เท่านั้นเนื่องจากเป็นรุ่นมาตรฐาน
(โปรดทราบว่าฉันไม่ได้ตื่นเต้นกับการออกแบบการใช้ตารางถาวรใน tempdb เพื่อเก็บข้อมูลทั้งหมดนี้การเปลี่ยนแปลงที่เป็นความท้าทายด้านเทคนิคและการเมืองที่น่าสนใจ แต่ฉันเปิดรับข้อเสนอแนะ)
UPDATE 4/23/2013
เราได้เปิดเคสการสนับสนุนกับ Microsoft ฉันจะเก็บคำถามนี้ไว้เมื่อเราเรียนรู้เพิ่มเติม
UPDATE 5/10/2556
วิศวกรฝ่ายสนับสนุนของ SQL Server ยอมรับว่าการรอเกิดจากคอลัมน์ตัวตน การลบตัวตนจะช่วยลดการรอคอย เราไม่สามารถซ้ำปัญหาใน SQL 2008 R2; มันเกิดขึ้นเฉพาะใน SQL 2012