תופעות
נניח שמותקנת אצלך Microsoft SQL Server 2014, 2016 או 2017. ייתכן שתיתקל באחת או יותר מהבעיות הבאות:
-
המופע של SQL Server מופיע בלתי מגיב ומתרחשת שגיאת "מתזמן שאינו מניב". ייתכן שתצטרך להפעיל מחדש את השרת כדי לשחזר אותו.
-
השלמת לפני החזרה של טרנזקציה עשויה להימשך זמן רב. ברוב המקרים, הפעלה מחדש של המופע תאפשר למסד הנתונים להחלים במהירות רבה יותר מאשר החזרה למצב קודם. שים לב שקיימות סיבות רבות לכך שתהליך החזרה למצב קודם עשוי להימשך זמן רב, עיין בסעיף "מידע נוסף" להלן לקבלת פרטים על ניטור rollbacks לפני שתנסה להפעיל מחדש.
-
ייתכן שתראה את ההמתנה הגבוהה ב-spinlocks כגון SOS_OBJECT_STORE.
פתרון
בעיה זו נפתרה בעדכונים המצטברים הבאים עבור SQL Server:
כל עדכון מצטבר חדש עבור SQL Server מכיל את כל התיקונים החמים ואת כל תיקוני האבטחה שנכללו בעדכון המצטבר הקודם. עיין בעדכונים המצטברים האחרונים עבור SQL Server:
העדכון המצטבר האחרון עבור SQL Server 2017
מידע אודות service pack עבור SQL Server
עדכון זה תוקן בשרת ה-service pack הבא של SQL Server:
ערכות Service pack מצטברות. כל ערכת service pack חדשה מכילה את כל התיקונים הכלולים בערכות service pack קודמות, יחד עם כל התיקונים החדשים. ההמלצה שלנו היא להחיל את ה-service pack העדכני ביותר ואת העדכון המצטבר העדכני ביותר עבור ה-service pack. אין לך אפשרות להתקין ערכת service pack קודמת לפני התקנת ערכת השירות העדכנית ביותר. השתמש בטבלה 1 במאמר הבא לקבלת מידע נוסף אודות ערכת השירות העדכנית ביותר והעדכון המצטבר העדכני ביותר.
כיצד לקבוע את רמת הגירסה, המהדורה והעדכון של SQL Server ורכיביו
מידע נוסף
ישנן סיבות רבות לכך שניתן להימשך זמן רב כגון טרנזקציה ארוכת-טווח, מספר גדול של VLFs בקובץ יומן הטרנזאקציות, הקלט/פלט האיטי וכדומה. כדי לוודא שהבעיה המתוארת במאמר זה היא גורם הבסיס לחזרה איטית, אנו ממליצים להשתמש בטכניקות הבאות כדי לנטר את ההתקדמות של פעולת החזרה למצב קודם:
-
מתוך sys.dm_exec_requests, זהה את הsession_id שהפקודה שלו מוגדרת ל-"נהרג/לפני החזרה" ולוודא שההפעלה מצטברת הן את ההתקדמות של קלט-פלט והן של זמן 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 t
הצטרפות לsys.dm_exec_requests s ב-t.transaction_id = s.transaction_id
כאשר t.database_id = db_id (' <Database Name') וs.session_id = <Session_id ביצוע החזרה למצב קודם operation>
הערה:
בשאילתה שלעיל,
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.
עיין במאמרים הבאים לקבלת מידע נוסף אודות התאוששות ארוכת-הפעלה:
-
SQL Server (2000, 2005, 2008): שחזור/החזרה למצב קודם לוקח זמן רב מהצפוי
-
כיצד מבנה של קובץ יומן רישום יכול להשפיע על זמן השחזור של מסד נתונים
מצב
Microsoft אישרה שזוהי בעיה במוצרי Microsoft המופיעים בסעיף "חל על".
הפניות
קבל מידע על המינוחשבו Microsoft משתמשת כדי לתאר עדכוני תוכנה.