KB4338890 - תיקון: השגיאה "מתזמן שאינו מניב" ונראה SQL Server אינו מגיב ב SQL Server 2014, 2016 ו- 2017

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

סימפטומים

נניח ש- Microsoft SQL Server 2014, 2016 או 2017 מותקן במחשב שלך.  ייתכן שתיתקל באחת או יותר מהבעיות הבאות:

  • מופע SQL Server אינו מגיב ומתרחשת השגיאה "Non-yielding Scheduler". ייתכן שתצטרך להפעיל מחדש את השרת כדי לשחזר אותו.
  • חזרה למצב קודם של טרנזקציה עשויה להימשך זמן רב. ברוב המקרים, הפעלה מחדש של המופע תאפשר למסד הנתונים להתאושש מהר יותר מחזרה למצב קודם. שים לב שישנן סיבות רבות לכך שחזרה למצב קודם עשויה להימשך זמן רב, עיין בסעיף "מידע נוסף" להלן לקבלת פרטים על ניטור החזרות למצב קודם לפני ניסיון הפעלה מחדש.
  • ייתכן שתראה המתנה גבוהה ב- spinlocks כגון SOS_OBJECT_STORE.

פתרון

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

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

עדכון מצטבר 2 עבור SQL Server 2016 SP2

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

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

העדכון המצטבר האחרון עבור SQL Server 2017

העדכון המצטבר האחרון עבור SQL Server 2016

העדכון המצטבר האחרון עבור SQL Server 2014

מידע על ערכות Service Pack עבור SQL Server

עדכון זה מתוקן ב- Service Pack הבא עבור SQL Server:

Service Pack 3 עבור SQL Server 2014

אודות ערכות Service Pack עבור SQL Server:

ערכות Service Pack הן מצטברות. כל ערכת Service Pack חדשה מכילה את כל התיקונים הקיימים בערכות Service Pack קודמות, יחד עם תיקונים חדשים. אנו ממליצים להחיל את ערכת ה- Service Pack העדכנית ביותר ואת העדכון המצטבר העדכני ביותר עבור ערכת Service Pack זו. אין צורך להתקין ערכת Service Pack קודמת כדי להתקין את ערכת ה- Service Pack האחרונה. השתמש בטבלה 1 במאמר הבא לקבלת מידע נוסף אודות ערכת ה- Service Pack האחרונה והעדכון המצטבר האחרון.

כיצד לקבוע את הגירסה, המהדורה ורמת העדכון של SQL Server ומרכיביו

מידע נוסף

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

  • מתוך sys.dm_exec_requests, זהה את session_id שהפקודה שלו מוגדרת ל- "KILLED/ROLLBACK" וודא שההפעלה צוברת זמן קלט/פלט ו- CPU המצביע על התקדמות. אם IO אינו משתנה, ייתכן שזהו סימן לכך שאתה נתקל בבעיה המתוארת במאמר זה.
  • sys.dm_tran_database_transactions שאילתה כדי לזהות את המצב הנוכחי של חזרה למצב קודם באמצעות שאילתה כמו הבאה:

הערה

  • בחר getdate() כ- CurrentTime, database_transaction_next_undo_lsn,database_transaction_begin_lsn,t.transaction_id,database_transaction_begin_time,database_transaction_log_record_count,db_name(t.database_id)
  • מ sys.dm_tran_database_transactions ט
  • הצטרף sys.dm_exec_requests
       ON t.transaction_id=s.transaction_id
  • WHERE t.database_id=db_id('<Database Name') ו- s.session_id=<Session_id בעת ביצוע פעולת> החזרה למצב קודם

הערה:

בשאילתה לעיל,

database_transaction_next_undo_lsn הוא ה- LSN של הרשומה הבאה שיש לבטל. database_transaction_begin_lsn הוא ה- LSN של רשומת ההתחלה של הטרנזקציה ביומן הטרנזקציות.

database_transaction_next_undo_lsn אמור להצטמצם עם כל תמונה של שאילתה זו. החזרה למצב קודם תושלם בהצלחה כאשר database_transaction_next_undo_lsn יגיע database_transaction_begin_lsn.

המטרה כאן היא לצלם כמה תמונות של השאילתה הקודמת בתוך מרווח זמן מוגדר מראש ולאחר מכן להשתמש בדלתא של ה- LSNs שעובדו ב - database_transaction_next_undo_lsn בתוך מרווח זמן זה ולאקסטרפולציה של הזמן שנדרש כדי להעריך את הזמן שייקח ל- database_transaction_next_undo_lsn להגיע database_transaction_begin_lsn.

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

עיין במאמרים הבאים לקבלת מידע נוסף על התאוששות ארוכת טווח:

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".

חומרי עזר

קבל מידע על המינוח שבו משתמשת Microsoft כדי לתאר עדכוני תוכנה.