כברירת מחדל, Service Pack 1 עבור SQL Server 2014 ו- Service Pack 3 עבור SQL Server 2012 כוללים תיקון זה, ואין צורך להוסיף דגלי מעקב כדי להפוך את התיקון לזמין. כדי להפוך את התיקון לזמין לאחר התקנת אחד מהעדכונים המצטברים במקטע 'רזולוציה', עליך להפעיל את Microsoft SQL Server על-ידי הוספת דגל מעקב 1236 לפרמטרי האתחול.
סימפטומים
נניח שאתה מפעיל מופע של Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 או SQL Server 2008 R2 במחשב המכיל מעבדים רבים. כאשר מספר הנעילות (סוג משאב = מסד נתונים) עבור מסד נתונים ספציפי חורג מסף מסוים, אתה נתקל בבעיות הביצועים הבאות:
ערכים מוגבהים מתרחשים עבור ספירת LOCK_HASH spinlock.
הערה עיין בסעיף "מידע נוסף" לקבלת מידע אודות אופן הניטור של נעילת סיבוב זו.
השלמתן של שאילתות או פעולות הדורשות נעילת מסד נתונים נמשכת זמן רב. לדוגמה, ייתכן שתבחין בעיכובים הבאים בביצועים:
- כניסות אל SQL Server
- שאילתות שרת מקושרות
- sp_reset_connection
- עסקאות
הערה כדי לאתר את רשימת המנעולים (סוג משאב = מסד נתונים) במסד נתונים נתון, עיין בסעיף "מידע נוסף". ערך הסף משתנה בהתאם לסביבה.
פתרון
מידע עדכון מצטבר
הבעיה תוקנה לראשונה בעדכון המצטבר הבא של SQL Server.
עדכון מצטבר 13 עבור SQL Server 2008 R2 SP2 /en-us/help/2967540
עדכון מצטבר 17 עבור SQL Server 2008 SP3 /en-us/help/2958696
עדכון מצטבר 1 עבור SQL Server 2014 /en-us/help/2931693
עדכון מצטבר 9 עבור SQL Server 2012 SP1 /en-us/help/2931078
אודות עדכונים מצטברים עבור SQL Server
כל עדכון מצטבר חדש עבור SQL SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:
- העדכון המצטבר האחרון עבור SQL Server 2008 R2 SP2
- העדכון המצטבר האחרון עבור SQL Server 2008 SP3
- העדכון המצטבר האחרון עבור SQL Server 2014
- העדכון המצטבר האחרון עבור SQL Server 2012 SP1
מידע על תיקונים חמים
תיקון חם נתמך זמין מ- Microsoft. עם זאת, תיקון חם זה נועד לפתור רק את הבעיה המתוארת במאמר זה. החל תיקון חם זה רק על מערכות שנתקלים בבעיה ספציפית זו.
אם התיקון החם זמין להורדה, קיים סעיף "הורדת תיקונים חמים זמינים" בראש מאמר Knowledge Base זה. אם מקטע זה אינו מופיע, שלח בקשה לשירות הלקוחות והתמיכה של Microsoft לקבלת התיקון החם.
הערה אם מתרחשות בעיות נוספות או אם נדרש פתרון בעיות, ייתכן שיהיה עליך ליצור בקשת שירות נפרדת. עלויות התמיכה הרגילות יחולו על שאלות תמיכה ובעיות נוספות שאינן זכאיות לתיקון חם ספציפי זה. לקבלת רשימה מלאה של מספרי הטלפון של שירות הלקוחות והתמיכה של Microsoft או כדי ליצור בקשת שירות נפרדת, בקר באתר האינטרנט הבא של Microsoft:
/contactus/?ws=support הערה הטופס "הורדת תיקון חם זמין" מציג את השפות שעבורן התיקון החם זמין. אם אינך רואה את השפה שלך, הסיבה לכך היא שאין תיקון חם זמין עבור שפה זו.
מצב
Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".
מידע נוסף
כאשר יישום יוצר חיבור ל- SQL Server, הוא יוצר תחילה הקשר של מסד נתונים. כברירת מחדל, החיבור ינסה להשיג נעילת מסד נתונים במצב SH. נעילת SH-DATABASE תשוחרר כאשר החיבור ייעצר או כאשר הקשר מסד הנתונים ישתנה במהלך חיי החיבור. אם ברשותך חיבורים פעילים רבים המשתמשים באותו הקשר של מסד נתונים, תוכל להשתמש בנעילות רבות מסוג המשאב 'מסד נתונים' עבור מסד נתונים ספציפי זה.
במחשב הכולל 16 יחידות CPU או יותר, רק אובייקטי טבלה משתמשים בסכימת נעילה המחולקת למחיצות. עם זאת, נעילות מסד הנתונים אינן מחולקות למחיצות. לכן, ככל שמספר הנעילות של מסד הנתונים גדול יותר, כך נדרש ל- SQL Server זמן רב יותר כדי להשיג נעילה במסד הנתונים. רוב היישומים אינם נתקלים בבעיות הנגרמות על-ידי עיצוב זה. אך ברגע שהמספר חורג מסף מסוים, נדרשת עבודה וזמן נוספים להשגת המנעול. למרות שהעלות היא רק מיקרו שניות לכל מנעול נוסף, הזמן הכולל יכול לגדול במהירות מכיוון שכדליי ה-hash של המנעול מוגנים באמצעות מנעול. פעולה זו גורמת למחזורי CPU נוספים וממתינה עד שעובדים נוספים יקבלו את הנעילה.
תיקון חם זה מציג חלוקה למחיצות של נעילת מסד נתונים כאשר דגל המעקב T1236 מופעל בעת האתחול. חלוקת נעילת מסד הנתונים שומרת על עומק רשימת הנעילה הניתן לניהול בכל מחיצה מקומית. פעולה זו ממטבת באופן משמעותי את נתיב הגישה המשמש להשגת נעילת מסד נתונים.
כדי לנטר את LOCK_HASH spinlock, באפשרותך להשתמש בשאילתה הבאה. SET NO COUNT ON
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[סיבובים] bigint,[spins_per_collision] אמיתי,[sleep_time] bigint,[backoffs] int)
DECLARE @counter int = 1
בעוד ש-100 @counter<
BEGIN
INSERT INTO #spinlock_stats SELECT GETDATE() כ- "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
המתן לעיכוב '00:00:05'
SET @counter +=1
END
בחר * מתוך #spinlock_stats סדר לפי [CaptureTime]
DROP TABLE #spinlock_stats לקבלת מידע נוסף אודות אבחון ופתרון של מחלוקת SPINLOCK ב- SQL Server, עבור למסמך הבא:
אבחון ופתרון מחלוקת מסוג Spinlock ב- SQL Server הערה למרות שמסמך זה נכתב עבור SQL Server 2008 R2, המידע עדיין ישים עבור SQL Server 2012.
חומרי עזר
לקבלת מידע נוסף אודות דגלי מעקב ב- SQL Server 2012, עבור לאתר האינטרנט הבא של TechNet:
מידע אודות דגלי מעקב ב- SQL SQL Server 2012
לקבלת מידע נוסף אודות האופן שבו ניתן למצוא את מספר נעילות מסד הנתונים בכל משתמש לכל מסד נתונים, השתמש בשאילתה הבאה לחישוב ערך זה:בחר Resource_database_id, resource_type, request_mode request_status,
COUNT (*) 'LockCount' מתוך sys.dm_tran_locks
קיבוץ לפי Resource_database_id, resource_type, request_mode request_status