KB3005300 - การแก้ไข: การใช้ CPU สูงเมื่อคุณใช้ชนิดข้อมูลเชิงพื้นที่และวิธีที่เกี่ยวข้องใน SQL Server 2012 หรือ SQL Server 2014

นำไปใช้กับ
SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard

อาการ

เมื่อคุณใช้ชนิดข้อมูลเชิงพื้นที่และวิธีการที่เกี่ยวข้องใน Microsoft SQL Server 2012 หรือ Microsoft SQL Sever 2014 เป้าหมายควอนตัมของตัวจัดกําหนดการ SQL Server Operating System (SQLOS) จะได้รับการปกป้องโดยชั้นการโฮสต์ SQL Server CLR การป้องกันนี้เกี่ยวข้องกับการบุกหน้า สวิตช์ SQLOS อาจเพิ่มการใช้งาน CPU เหตุผลสําหรับการสลับล่วงหน้าคือเพื่อป้องกันตัวจัดกําหนดการ SQLOS การเรียกใช้การใช้งานแบบ SQL Server CLR อาจใช้เวลาที่ไม่ได้ระบุเวลาโดยไม่ยอมจํานนต่อตัวจัดกําหนดการ SQLOS หรือเปลี่ยนแปลงลักษณะการทํางานและรูปแบบภาวะพร้อมกัน ดังนั้น ชนิดข้อมูลเชิงพื้นที่จึงถูกออกแบบมาให้สลับการคาดการณ์ล่วงหน้าระหว่างการเรียกใช้แต่ละครั้ง

หมายเหตุ: ชนิดข้อมูลเชิงพื้นที่จะยึดตาม CLR ของ SQL Server ซึ่งอาจพบระดับต่างๆ ของการใช้หน่วยความจํา .NET และลักษณะการสลับเธรด

สาเหตุ

การดําเนินการของวิธีการชนิดข้อมูลเชิงพื้นที่มักจะเป็นแบบกึ่งมิลลิวินาที และอาจไม่จําเป็นต้องมีตัวจัดกําหนดการ SQL OS แบบเต็มและการป้องกันล่วงหน้า ค่าใช้จ่ายในการสลับไปและกลับจากโหมด preemptive อาจใหญ่กว่าการดําเนินการของวิธีการเชิงพื้นที่มาก

การแก้ปัญหา

การแก้ไขปัญหานี้จะแนะนําการตั้งค่าสถานะการติดตาม 6531 เพื่อระบุไปยังชั้นโฮสต์ SQLOS ว่าชนิดข้อมูลเชิงพื้นที่ควรหลีกเลี่ยงการป้องกันก่อน ซึ่งสามารถลดการใช้งาน CPU และปรับปรุงประสิทธิภาพโดยรวมสําหรับกิจกรรมเชิงพื้นที่ ใช้การตั้งค่าสถานะการติดตามนี้ก็ต่อเมื่อการเรียกใช้วิธีการเชิงพื้นที่แต่ละรายการ (ต่อแถวและคอลัมน์) ใช้เวลาน้อยกว่า ~4 มิลลิวินาที การเรียกใช้ที่นานขึ้นโดยไม่มีการป้องกันล่วงหน้า อาจทําให้เกิดปัญหาภาวะพร้อมกันของตัวจัดกําหนดการ และข้อความลงโทษ SQLCLR ถูกบันทึกไปยังบันทึกข้อผิดพลาด

ปัญหานี้ได้รับการแก้ไขครั้งแรกในการอัปเดตแบบสะสมของ SQL Server ต่อไปนี้

การอัปเดตสะสม 4 สําหรับ SQL Server 2012 SP2 /en-us/help/3007556

การอัปเดตสะสม 5 สําหรับ SQL Server 2014 /en-us/help/3011055

การอัปเดตสะสม 13 สําหรับ SQL Server 2012 SP1 /en-us/help/3002044

เกี่ยวกับการอัปเดตสะสมสําหรับ SQL Server

การอัปเดตแบบสะสมใหม่แต่ละรายการสําหรับ SQL Server จะมีโปรแกรมแก้ไขด่วนและการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการอัปเดตแบบสะสมครั้งก่อนหน้า ตรวจดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:

      

สถานะ

Microsoft ได้ยืนยันว่านี่เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ที่แสดงไว้ในส่วน "นำไปใช้กับ"