none
Archiving Old Data RRS feed

  • שאלה

  • שלום,

    אני מעונין לבצע archiving למידע ישן. הבעיה היא שאני לא יכול להשתמש ב- partitions, אלא בהעתקה ומחיקה בלבד.

    למישהו יש כללים מרכזיים (או מאמר טוב) כיצד לבצע תהליך כזה? כיצד להמנע מפגיע בביצועים בשרת ה- OLTP?

    תודה :) 

    יום ראשון 10 אפריל 2011 12:26

תשובות

  • הי,

    בקצרה:

    1. תוודא שעל כל הישויות יש:

    1.1 clustered index על identity column.

    1.2 nonclustered index על תאריך הכניסה של הרשומה.

    2. המחיקה תהייה בבלקים קטנים ע"מ לא לבצע אסקלציה של רמת הנעילה ל -table באופן הבא:

    2.1 - חפש טווחרשומות למחיקה, ע"י רישום של רשומה אחרונה שעברה ל -Archive ורשומה מקסימלית שיש להעביר ל- archive.

    2.2 מעבר על הרשומות בלופ עם באלקים קטנים, העתקה ומחיקה.

    2.3 עדכון רשומה אחרונה שעברה. 

    3. התהליך ינועל ע"י טבלת ניהול ו-ג'וב:

    טבלת ניהול -  עבור כל יישות מה התזמון, איזה גודל באלק וסדר הרצה, למנוע נפילות עקב Foreign keys.

    ג'וב: לניהול דגימות מול טבלת ניהול והרצה.

    בהצלחה 

      


    אסף שלם
    • סומן כתשובה על-ידי Rani W יום ראשון 10 אפריל 2011 14:17
    יום ראשון 10 אפריל 2011 13:14
  • בהמשך להמלצות הטובות של אסף אני מצרף דוגמא שעושה שימוש ב OUTPUT 

     

     

    WHILE 1 = 1               

    BEGIN;  

     DELETE TOP (4000) RequestOptions    

     OUTPUT   deleted.RequestOptionID  

         ,deleted.RequestID  

         ,deleted.OptionID  

         ,deleted.OptionTypeID  

         ,deleted.StatusID  

         ,deleted.StatusReason  

         ,deleted.AssetUnionID  

     INTO MM_HST.dbo.RequestOptions(  

          RequestOptionID  

         ,RequestID  

         ,OptionID  

         ,OptionTypeID  

         ,StatusID  

         ,StatusReason  

         ,AssetUnionID)  

     FROM RequestOptions    

     INNER JOIN #OldRequests ON #OldRequests.ID = RequestOptions.MRID;  

      IF (@@ROWCOUNT = 0)  BEGIN   BREAK;   END;   

    END;  

     


    -- Yaniv www.sqlserverutilities.com http://blogs.microsoft.co.il/blogs/yaniv_etrogi
    • סומן כתשובה על-ידי Rani W יום ראשון 10 אפריל 2011 14:29
    יום ראשון 10 אפריל 2011 13:56

כל התגובות

  • הי,

    בקצרה:

    1. תוודא שעל כל הישויות יש:

    1.1 clustered index על identity column.

    1.2 nonclustered index על תאריך הכניסה של הרשומה.

    2. המחיקה תהייה בבלקים קטנים ע"מ לא לבצע אסקלציה של רמת הנעילה ל -table באופן הבא:

    2.1 - חפש טווחרשומות למחיקה, ע"י רישום של רשומה אחרונה שעברה ל -Archive ורשומה מקסימלית שיש להעביר ל- archive.

    2.2 מעבר על הרשומות בלופ עם באלקים קטנים, העתקה ומחיקה.

    2.3 עדכון רשומה אחרונה שעברה. 

    3. התהליך ינועל ע"י טבלת ניהול ו-ג'וב:

    טבלת ניהול -  עבור כל יישות מה התזמון, איזה גודל באלק וסדר הרצה, למנוע נפילות עקב Foreign keys.

    ג'וב: לניהול דגימות מול טבלת ניהול והרצה.

    בהצלחה 

      


    אסף שלם
    • סומן כתשובה על-ידי Rani W יום ראשון 10 אפריל 2011 14:17
    יום ראשון 10 אפריל 2011 13:14
  • בהמשך להמלצות הטובות של אסף אני מצרף דוגמא שעושה שימוש ב OUTPUT 

     

     

    WHILE 1 = 1               

    BEGIN;  

     DELETE TOP (4000) RequestOptions    

     OUTPUT   deleted.RequestOptionID  

         ,deleted.RequestID  

         ,deleted.OptionID  

         ,deleted.OptionTypeID  

         ,deleted.StatusID  

         ,deleted.StatusReason  

         ,deleted.AssetUnionID  

     INTO MM_HST.dbo.RequestOptions(  

          RequestOptionID  

         ,RequestID  

         ,OptionID  

         ,OptionTypeID  

         ,StatusID  

         ,StatusReason  

         ,AssetUnionID)  

     FROM RequestOptions    

     INNER JOIN #OldRequests ON #OldRequests.ID = RequestOptions.MRID;  

      IF (@@ROWCOUNT = 0)  BEGIN   BREAK;   END;   

    END;  

     


    -- Yaniv www.sqlserverutilities.com http://blogs.microsoft.co.il/blogs/yaniv_etrogi
    • סומן כתשובה על-ידי Rani W יום ראשון 10 אפריל 2011 14:29
    יום ראשון 10 אפריל 2011 13:56
  • תודה רבה לשניכם.

    עזר לי מאוד.

    יום ראשון 10 אפריל 2011 14:29
  • שמחתי לעזור ושים לב שבלולאה אנחנו נוגעים בלא יותר מ 5000 רשומות על מנת להימנע מ lock escalation כפי שציין אסף.
    -- Yaniv www.sqlserverutilities.com http://blogs.microsoft.co.il/blogs/yaniv_etrogi
    יום ראשון 10 אפריל 2011 14:37