content top
בניית אינדקסים

בניית אינדקסים "חכמה" לפי רמת הפרגמנטציה

רקע:

ביצוע ארגון מחדש לאינדקסים צריך להיות חלק מתוכניות התחזוקה של כל בסיס נתונים שהוא לא לקריאה בלבד (Read Only). אחרת "פתאום" עלולה להיות ירידה בביצועים, בעיקר אם בסיס הנתונים גדל. תזמון הארגון מחדש צריך להקבע עפ"י כמות העידכונים וגודל בסיס הנתונים, אבל לדעתי, לפחות פעם בשבוע לא מזיק.
אם יש לך SQL 2005 Enterprise Edition, יש לך אפשרות לבנות מחדש אינדקסים בעוד הטבלה נגישה
(Online Indexing Operations in SQL Server 2005).
אבל מה קורה אם יש לך SQL 2000 או שהסתפקת ב-Standard Edition ופחות?
מה קורה אם החלטת לבצע בניית אינדקסים (Rebuild) או אירגון אינדקסים (Reorg) כחלק מתוכניות התחזוקה (Maintenance Plans) והדבר הזה רץ שעות ותוקע את כל ה-DB, או שפתאום ה-T-Log שלך נהיה ענק ואין לך מקום בדיסק לבצע לו גיבוי ?

פתרון

הפיתרון לבעייה זו הוא להריץ T-SQL שבודק את רמת הפרגמנטציה של האינדקס ואת גודל הטבלה (אם הטבלה קטנה – לא כל כך משנה אם יש פרגמנטציה) ומבצע בנייה או אירגון רק לאינדקסים שמצריכים את זה.

לינקים חשובים

זו בוודאי לא המצאה שלי, מיקרוסופט מדברים על העניין הזה כאן.
אם תחפשו בגוגל – Rebuild indexes based on fragmentation, תקבלו הרבה תוצאות.
אחת הדוגמאות הטובות לדעתי: Rebuild indexes based on fragmentation

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

גירסה ל-SQL 2005

גירסה ל-SQL 2000

(קליק ימני-שמירה בשם כדי שהקובץ ייראה כמו שצריך ולא מעוך בדפדפן).

ההרצה:

מאחר וניתן להגיד שהפרוצדורות הנ"ל רצות בערך בצורה אינקרמנטאלית (Incremental), אני ממליצה להריץ אותן מידי יום. בצורה זו, יש סיכוי סביר שזמן הריצה יהיה קטן יותר מאשר הרצה שבועית או יותר.
בנוסף, הביצועים בבסיס הנתונים אמורים להשתפר ככל שהאינדקסים יותר מאורגנים (פחות IO). מה יכול להיות טוב יותר מאשר אינדקסים ברמת אופטמיזציה גבוהה, מידי יום?

הפרמטרים ה"אידאלים" הם בדר"כ:

EXEC sp_RebuildIndexes_SQL2005 @maxfrag=75.0, @maxdensity=90.0, @databasename='YourDB'

Bookmark and Share

תגובה אחת ל “בניית אינדקסים "חכמה" לפי רמת הפרגמנטציה”

  1. מאת עופר:

    אני חדש באתר…,יופי של מאמרים !
    שאלה,
    מה לגבי פרגמנטציה של טבלה ,אין צורך לבדוק ?
    ואם כן איך בודקים ? ואיך "מתקנים" ?

השאר תגובה