อาการ
สมมติว่า คุณเรียกใช้คิวรีที่เกี่ยวข้องกับการรวมหรือการรวมบนคอลัมน์ที่ครอบคลุมโดยสถิติของคอลัมน์เดียวและคอลัมน์หลายคอลัมน์ (ซึ่งคอลัมน์นี้ไม่ใช่คอลัมน์นําหน้า) ถ้าคุณกําลังใช้ Cardinality Estimator (CE) เริ่มต้นใน SQL Server 2016 งานอาจประเมินจํานวนแถวที่ไม่ซ้ํากันต่ําเกินไป ซึ่งนําไปสู่แผนการดําเนินการคิวรีที่ไม่เหมาะสม (ตัวอย่างเช่น: การประมาณที่ต่ําอาจทําให้การให้หน่วยความจําไม่เพียงพอสําหรับตัวดําเนินการแฮช ซึ่งทําให้คิวรีสปิลล์ไปยัง tempdb)
สถานะ
Microsoft ได้ยืนยันว่านี่เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่แสดงไว้ในส่วน "นำไปใช้กับ"
การแก้ปัญหา
ปัญหานี้ได้รับการแก้ไขในการอัปเดตแบบสะสมต่อไปนี้สําหรับ SQL Server:
หมายเหตุ เพื่อให้การแก้ไขนี้มีผล คุณต้องเปิดใช้งานโปรแกรมแก้ไขด่วนตัวปรับคิวรีให้เหมาะสมโดยใช้การตั้งค่าสถานะการติดตาม (TF) 4199 หรือการกําหนดค่าขอบเขตฐานข้อมูลหรือตัวเลือกคําแนะนําคิวรีที่เกี่ยวข้อง
เกี่ยวกับการอัปเดตสะสมสําหรับ SQL Server:
การอัปเดตแบบสะสมใหม่แต่ละรายการสําหรับ SQL Server จะมีโปรแกรมแก้ไขด่วนและการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตแบบสะสมครั้งก่อนหน้า ตรวจดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:
วิธีแก้ไขปัญหาชั่วคราว
ปัญหานี้สามารถแก้ไขได้โดยการเพิ่มคําแนะนําคิวรีต่อไปนี้:
ใช้ HINT('FORCE_LEGACY_CARDINALITY_ESTIMATION')
การอ้างอิง
เรียนรู้เกี่ยวกับคำศัพท์ที่ Microsoft ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์