תיקון: בעיות ביצועים מתרחשות כאשר מגביר פעילות נעילת מסד נתונים ב- SQL Server

כברירת מחדל, Service Pack 1 עבור 2014 שרת SQL ו- Service Pack 3 עבור SQL Server 2012 כוללות תיקון זה ואין צורך להוסיף דגלים מעקב כדי להפוך לזמין את התיקון. כדי להפוך לזמין את התיקון לאחר התקנת אחד העדכונים המצטברים בסעיף פתרון הבעיה, עליך להתחיל Microsoft SQL Server על-ידי הוספת דגל מעקב 1236 פרמטרים הפעלה.

מאפייני הבעיה

נניח להפעיל מופע של Microsoft SQL Server 2014, 2012 שרת SQL, SQL Server 2008 או SQL Server 2008 R2 במחשב המכיל מעבדים רבים. כאשר מספר הנעילות (סוג משאב = מסד נתונים) עבור מסד נתונים מסוים חורגת מסף מסוים, אתה נתקל בבעיות ביצועים הבאות:
  • ערכי הרשאות מלאות מתרחשים עבור ספירת spinlock LOCK_HASH .

    הערה עיין בסעיף 'מידע נוסף' לקבלת מידע אודות האופן שבו ניתן לפקח על זה spinlock.
  • פעולות שנדרשים נועל את מסד הנתונים או שאילתות להימשך זמן רב תושלם. לדוגמה, ייתכן שתבחין עיכובים הביצועים הבאים:
    • התחברויות לשרת SQL
    • שאילתות שרת מקושר
    • sp_reset_connection
    • תנועות
הערה כדי לאתר את הרשימה של נעילות (סוג משאב = מסד נתונים) על מסד נתונים נתונה, עיין בסעיף 'מידע נוסף'. ערך הסף משתנה על-ידי הסביבה.

פתרון

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

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

עדכון מצטבר 13 עבור SQL Server 2008 R2 SP2

17 עדכון מצטבר עבור SQL Server 2008 SP3

עדכון מצטבר 1 עבור SQL Server 2014

עדכון מצטבר 9 עבור SQL Server 2012 SP1

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

מידע על תיקונים חמים

תיקון חם נתמך זמין מ-Microsoft. עם זאת, תיקון חם זה מיועד לפתור רק את הבעיה המתוארת במאמר זה. יש להחיל תיקון חם זה רק במערכות שהתעוררה בהן בעיה ספציפית זו.

אם התיקון החם זמין להורדה, ישנו סעיף "תיקון חם זמין להורדה" בראש מאמר Knowledge Base. אם מקטע זה אינו מופיע, שלח בקשה לשירות הלקוחות של Microsoft ותמיכה כדי לקבל את התיקון החם.

הערה אם יתגלו בעיות נוספות, או אם נדרש פתרון בעיות כלשהו, ייתכן שתצטרך ליצור בקשת שירות נפרדת. עלויות התמיכה הרגילות יחולו על שאלות ובעיות נוספות תמיכה בעיות אשר אינן מצריכות החם הספציפי הזה. לקבלת רשימה מלאה של מספרי הטלפון של התמיכה ושירות הלקוחות של Microsoft או כדי ליצור בקשת שירות נפרדת, בקר באתר האינטרנט הבא של Microsoft:הערה הטופס "תיקון חם זמין להורדה" מציג את השפות שעבורן התיקון החם זמין. אם אינך רואה את השפה שלך, הסיבה לכך היא שהתיקון חם אינו זמין עבור שפה זו.

מצב

Microsoft אישרה כי מדובר בבעיה במוצרי Microsoft הרשומים במקטע 'חל על'.

מידע נוסף

כאשר יישום יוצר חיבור ל- SQL Server, היא מקימה תחילה את הקשר מסד נתונים. כברירת מחדל, החיבור ינסה להשיג נעילה מסד נתונים במצב SH. נעילת מסד הנתונים של SH יפורסמו כאשר החיבור מופסק או הקשר מסד הנתונים השתנה במהלך תקופת החיים של החיבור. אם ברשותך חיבורים פעילים רבים המשתמשים באותו הקשר מסד נתונים, באפשרותך להגדיר נעילות רבים של סוג המשאב של מסד הנתונים עבור מסד נתונים מסוים.

במחשב בעל 16 או יותר יחידות ה-Cpu, רק אובייקטים של טבלה להשתמש בערכה נעל מחולק למחיצות. עם זאת, לא למחיצות נועל מסד הנתונים. לכן, נועל המספר של מסד נתונים גדול יותר, כך משך זמן עבור SQL Server להשיג נעילה של מסד הנתונים. רוב היישומים לא תיתקל בעיות הנגרמות על-ידי עיצוב זה. אך ברגע המספר חורגת מסף מסוים, עבודה נוספת ואת זמן נדרש כדי להשיג את הנעילה. למרות העלות היא רק מיקרו שניות עבור כל נעילה נוספת, הזמן הכולל באפשרותך להגדיל במהירות מכיוון ה-buckets hash נעל מוגנים על-ידי שימוש של spinlock. פעולה זו גורמת מחזורי CPU נוספים והמתנה עובדים נוספים להשיג את הנעילה.

תיקון חם זה מציג נעל יצירת מחיצות במסד הנתונים כאשר דגל מעקב T1236 זמינה בעת האתחול. חלוקה למחיצות את הנעילה במסד הנתונים שומר את העומק של הרשימה נעל לניהול כל למחיצה מקומית. הדבר מייעל באופן משמעותי את נתיב הגישה בו נעשה שימוש כדי להשיג נעילה מסד נתונים .

כדי לפקח על LOCK_HASH spinlock, באפשרותך להשתמש בשאילתה הבאה.
SET NOCOUNT ONCREATE TABLE #spinlock_stats([CaptureTime] datetime,[name] nvarchar(512),[collisions] bigint,
[spins] bigint,[spins_per_collision] real,[sleep_time] bigint,[backoffs] int)
DECLARE @counter int = 1
WHILE @counter < 100
BEGIN
INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [name] = 'LOCK_HASH'
WAITFOR DELAY '00:00:05'
SET @counter +=1
END
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats
לקבלת מידע נוסף אודות באבחון ובפתרון של תחרות spinlock בשרת SQL, עבור אל המסמך הבאים:

הערה למרות מסמך זה נכתב עבור SQL Server 2008 R2, המידע ישימה עדיין על SQL Server 2012.

הפניות

לקבלת מידע נוסף אודות דגלים מעקב ב- SQL Server 2012, עבור אתר האינטרנט של TechNet הבא:


לקבלת מידע נוסף אודות האופן שבו ניתן למצוא מספר הנעילות מסד הנתונים משתמש בכל מסד נתונים, להשתמש בשאילתה הבאה כדי לחשב ערך זה:
select  Resource_database_id, resource_type, request_mode, request_status,  count (*) 'LockCount' from sys.dm_tran_locks 
group by Resource_database_id, resource_type, request_mode, request_status


מאפיינים:

מזהה פריט: 2926217 - סקירה אחרונה: 25 בינו׳ 2017 - תיקון: 1

משוב