อาการ
เมื่อการแทรกพร้อมกันเกิดขึ้นมากเกินไปในกลุ่มแฮชเดียวกัน หรือแคชแผนเฉพาะกิจ SQL Server ถึงขีดจํากัดการเข้าร่วม 160,036 รายการ ความขัดแย้งที่ร้ายแรงบน SOS_CACHESTORE spinlock จะเกิดขึ้น ในสถานการณ์นี้ การใช้งาน CPU สูงเกิดขึ้นใน microsoft SQL Server
สาเหตุ
ปัญหานี้เกิดขึ้นเมื่อแคชแผน SQL Server ถึงขีดจํากัดรายการ และแผนที่มีต้นทุนต่ําต้องถูกเอาออกเพื่อแทรกแผนใหม่ ซึ่งทําให้เกิดการกระตุกของ SOS_CACHESTORE จํานวนมากที่ให้การซิงโครไนซ์สําหรับบักเก็ตตารางแฮชของแคชแผน SQL Server
การแก้ไข
ข้อมูลการอัปเดตสะสม
ปัญหานี้ได้รับการแก้ไขเป็นครั้งแรกในการอัปเดตแบบสะสมของ SQL Server ต่อไปนี้
แต่ละปรับปรุงสะสมใหม่สําหรับ SQL Server ประกอบด้วยโปรแกรมแก้ไขด่วนทั้งหมด และการแก้ไขข้อบกพร่องด้านความปลอดภัยทั้งหมดที่รวมอยู่ในการปรับปรุงสะสมก่อนหน้านี้ ดูการอัปเดตแบบสะสมล่าสุดสําหรับ SQL Server:
ข้อมูลเพิ่มเติม
แคชของแผนมีขีดจํากัดสองขีดจํากัด: ขนาดรวมและจํานวนรวมของแผนทั้งหมด ขีดจํากัดขนาดและจํานวนรายการอธิบายไว้ในรายงานต่อไปนี้:
จํานวนรายการสูงสุดที่แคชแผนสามารถเก็บได้คือสี่เท่าของจํานวนกลุ่ม คุณสามารถตรวจสอบข้อมูลนี้โดยการเรียกใช้คิวรีต่อไปนี้:
select name, type, buckets_count
from sys.dm_os_memory_cache_hash_tables
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
select name, type, pages_kb, entries_count
from sys.dm_os_memory_cache_counters
where name IN ( 'SQL Plans' , 'Object Plans' , 'Bound Trees' )
ตัวอย่างเช่น บนระบบ 64 บิต จํานวนบักเก็ตสําหรับแคชแผน SQL Server คือ 40,009 ดังนั้น จํานวนรายการสูงสุดที่สามารถใส่ลงในแคชแผน SQL Server คือ 160,036 รายการ
ถ้าคุณมีปริมาณงานที่ใช้คิวรีเฉพาะกิจต่างๆ ขีดจํากัดนี้อาจกลายเป็นคอขวด การเปลี่ยนแปลงที่ทําโดยโปรแกรมแก้ไขด่วนนี้ที่อยู่สถานการณ์นี้ หลังจากที่คุณติดตั้งโปรแกรมแก้ไขด่วนนี้ และเปิดใช้งานการเปลี่ยนแปลง โดยใช้ค่าสถานะการติดตามเริ่มต้น "-T 174," จํานวนกลุ่มจะเพิ่มขึ้นเป็น 160,001 บนระบบ 64 บิต แคชแผนจะสามารถเก็บแผนได้สูงสุด 640,004 แผน
สถานะ
Microsoft ยืนยันว่าปัญหานี้เป็นปัญหาที่เกิดขึ้นกับผลิตภัณฑ์ของ Microsoft ซึ่งมีการระบุไว้ในส่วน "นำไปใช้กับ"