סטטיסטיקות למחסני נתונים

מתוך iSeminar בנוגע ל-best practices של סטטיסטיקות למחסני נתונים:

בטבלאות בעלות Partition ישנם שלושה סוגים של סטטיסטיקות שניתן לאסוף על הטבלה:

  1. סטטיסטיקות גלובליות (Global/table statistics).
  2. סטטיסטקות ברמת פרטישן (Partition statistics).
  3. סטטיסטיקות ברמת סאב-פרטישן (Sub-partition statistics).

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

בגרסת אורקל 10g רצוי לחלק את איסוף הסטטיסטיקות לשלושה סוגים של טבלאות:

  1. טבלאות קטנות (מימדים וכו’) בהן כדאי לעשות  compute statistics.
  2. טבלאות גדולות שאין בהם data skew (פיזור אחיד של הנתונים בטבלה) כדאי להשתמש ב-AUTO SAMPLE SIZE.
  3. טבלאות גדולות שיש בהם data skew כדאי להשתמש בגודל דגימה קבוע.

בגרסה 11 נעשה שינוי משמעותי בדרך שבה AUTO SAMPLE SIZE עובד ועכשיו הדגימה לוקחת את אותו הזמן כמו דגימה של 10 אחוזים אבל הדיוק הוא כמו ביצוע של compute statistics ולכן מומלץ להשתמש בו.

כאשר מכניסים מידע לתוך פרטישן ועדיין לא אוספים סטטיסטיקות, אורקל שומר את ה-min/max values בטבלה וכאשר מנסים לגשת לנתונים החדשים הוא נאלץ לעשות הערכות של הקרדינליות של הנתונים. בגרסה 10 ניתן להתגבר על הבעיה על ידי העתקת הסטטיסטיקות של הפרטישן הקודם ושינוי ה-min/max values. ניתן לבצע את זה באמצעות dbms_stats.copy_tab_stats (בגרסה 10.2.0.4 יש לשים לב לבאג 7687788 ולהתקין תיקון לפני השימוש). בגרסה 11 ניתן לבצע איסוף סטטיסטיקות באופן אינקרמנטלי כך שאיסוף הסטטיסטיקות יתבצע רק על הפרטישנים שהשתנו ובנוסף הסטטיסטיקות ברמת הפרטישן יעדכנו באופן אוטומטי את הסטטיסטיקות ברמה הגלובלית (ברמת הטבלה) ולצורך כך  יש ליצור מנגנון איסוף נוסף בשם synopsis stats (טבלה ב-sysaux).

לסיום, טיפ שנכון גם לגרסה 10 וגם לגרסה 11: כדאי לאסוף סטטיסטיקות על טבלה לפני שבונים עליה אינדקסים מכוון שבזמן בניית האינדקס אורקל אוסף סטטיסטיקות על האינדקסים באופן אוטומטי ואין טעם לאסוף סטטיסטיקות פעמיים

3 תגובות
  1. צביקה
    צביקה says:

    אחלה פוסט …
    דבר אחד שאני יכול להוסיף זה לגבי incremental stats ב 11g
    זה אמור לעבוד מעולה אבל יש באג שהאיסוף מאוד איטי כאשר לטבלה יש הרבה subpartitions .
    לדוגמא טבלה של 7 tb בעלת 60,000 subpartitions כנראה שלא נצליח לאסוף סטטיסטיקות בצורה אינקרמנטלית. 🙂

    הגב
    • Zohar Elkayam
      Zohar Elkayam says:

      באיזה גרסה בדקת? אני הסתכלתי על מה קורה ב-11.2.0.2 והיה דווקא בסדר (אבל לא בדקתי 7 טרה עם 60 אלף subpartition-ים… :P)

      הגב

השאירו תגובה

Want to join the discussion?
Feel free to contribute!

השאר תגובה

This site uses Akismet to reduce spam. Learn how your comment data is processed.