KB4522127 - การแก้ไข: ประสิทธิภาพของคิวรีไม่ดีเนื่องจากการประมาณคาร์ดินาลลิตี้ต่ําใน SQL Server 2016 เมื่อคุณใช้ CE เริ่มต้นและคอลัมน์ถูกครอบคลุมโดยสถิติทั้งคอลัมน์เดียวและหลายคอลัมน์

นำไปใช้กับ
SQL Server 2016 Service Pack 2 SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

อาการ

สมมติว่า คุณเรียกใช้คิวรีที่เกี่ยวข้องกับการรวมหรือการรวมบนคอลัมน์ที่ครอบคลุมโดยสถิติของคอลัมน์เดียวและคอลัมน์หลายคอลัมน์ (ซึ่งคอลัมน์นี้ไม่ใช่คอลัมน์นําหน้า) ถ้าคุณกําลังใช้ 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 ใช้เพื่ออธิบายการอัปเดตซอฟต์แวร์