KB3026083 - תיקון: מחלוקת SOS_CACHESTORE SpinLock במטמון תוכנית SQL Server אד הוק גורמת לשימוש גבוה ב- CPU ב- SQL Server

חל על
SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard 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 2014 Web - duplicate (do not use) 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) SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core

סימפטומים

כאשר מתרחשות יותר מדי הוספות בו-זמנית באותו דלי hash, או כאשר מטמון תוכנית SQL Server אד הוק מגיע למגבלת הכניסה שלו של 160,036, מתרחשת מחלוקת חמורה על SOS_CACHESTORE spinlock. במצב זה, מתרחש שימוש גבוה ב- CPU ב- Microsoft SQL Server.

גורם

הבעיה מתרחשת כאשר מטמון התוכנית של SQL Server מגיע למגבלת הכניסה שלו, ויש לפנות תוכניות בעלות נמוכה כדי להוסיף תוכניות חדשות. פעולה זו גורמת למחלוקת כבדה על ה- SOS_CACHESTORE spinlock המספק סינכרון עבור מיכלי טבלת ה- hash של מטמון תוכנית SQL Server.

פתרון

מידע עדכון מצטבר

הבעיה תוקנה לראשונה בעדכון המצטבר הבא של SQL Server.

אודות עדכונים מצטברים עבור SQL Server

כל עדכון מצטבר חדש עבור SQL 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 המפורטים בסעיף "חל על".