ברוך הבא, אורח
שם משתמש: סיסמא: זכור אותי

דיון: distinct count מה הסיפור שלו ? ולמה זה כל כך יקר?

distinct count מה הסיפור שלו ? ולמה זה כל כך יקר? 13 years 8 months ago #431

  • eldad
  • eldad's Avatar
  • Offline
  • Moderator
  • הודעות: 624
  • קרמה: 0
שלשום ניהלתי ויכוח בנוגע ל אופן שיש לבנות  distinct count measures ,
האם לבנות את המדד ב measure group נפרד ואיזה נפח אגרגציות יש להקנות לו.
מהויכוח נזכרתי שכבר ראיתי התייחסות טובה לנושא ב performance guide אך שכחתי את ההסברים למסכנות שהוסקו מהמאמר ולכן החלטתי ללמוד שוב את הנושא ולכתוב עליו.

פונקצית distinct count  ( מרגע זה אני אכתוב DC במקום distinct count)
הינה פונקציה שסופרת מופעים ייחודיים של אלמנט בטבלה. לצערנו למרות שהשימוש בפונקציה נרחב מאוד במיוחד במערכות BI ההשפעה שלו הינה שלילית בכול הנוגע לגודל אגרגציות וזמן process.
לדוגמה:
נגיד שיש לי טבלת measure group של מכירות מוצרים שיש לו אגרגציות ( ב profiler ניתן לראות
מתי תשובות לשאילתות MDX נלקחות מהאגרגציות) הכוללות סיכום של המכירות של קבוצות מוצרים בכול שנה (בקובייה עצמה המידע מפורט הרבה יותר האגרגציות מכילות מידע מסוכם).
נניח כי שיש לנו 10 קטגוריות מוצר ו 10 שנים , זה אומר שאם כל מוצר נמכר כל שנה אז
האגרגציות יהיו מורכבות מ 100 ערכים.

אם נחליט כי אנו מוסיפים ל measure group שלנו חישוב distinct count של לקוחות, זה יגרום
להוספת קוד לקוח לכול קבוצת מוצרים בכול שנה. אם יש לנו 1000 לקוחות אזי במקרה הכי גרוע בו לקוחות קונים את כול קבוצות המוצר שלי כל שנה כמות האגרגציות תקפוץ ל 100,000

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

מומלץ במידה והטבלה גדולה לחלק את הביצוע למספר partitions ע"פ קיבוץ של השדה לו מבוצע ה DC ( לדוגמה: חלוקה ע"פ מספרי לקוח 0-100 ו 100-200) ואם זה לא מספיק אפשר לחשוב להוסיף חלוקה נוספת המתאימה למודל ( לדוגמה: נחלק ע"פ תחום זמן הזהה לשאר המודל) .
שלוש הערות לסיום:
א. יצירת partition רבים מידי יכולים לגרום להשפעה שלילית על ביצועי השאילתות בשל ריבוי   
   תהליכי סריקה המתבצעים במספר רב של מקומות.
ב. בהרצת measure המוגדר כ DC מתבצעת שאילתת SQL הכוללת group by דבר שמאריך
     את זמן הריצה.
ג. העלות של האגרגציות ל measure group הכולל DC גבוהה ( משאבים וזמן) ולכן מומלץ
    לשקול את יצירתם בזהירות. לשם כך אפשר להשתמש ב "Usage-Based Optimization Wizard"       וב " Aggregation Utility"


אני מתנצל על המאמר הכבד, תגובות יתקבלו בברכה.


הנהלת האתר ביטלה גישת כתיבה ציבורית.
מנהלים: eldad
זמן יצירת העמוד: 0.171 שניות

הדף שלנו בפייסבוק

מעניין? שתפו דף זה באמצעות הטלפון הנייד

מאמרים

מגמות של ביג דאטה בעולם הביטוח
CA Technologies
SSIS - Buffer Size Optimization
קטגוריה ראשית
בדיקות BI ו-DWH לעומת הבדיקות בתחומים אחרים
קטגוריה ראשית
איסוף דרישות לפרויקטי BI
קטגוריה ראשית
כח המידע במיקוד
קטגוריה ראשית
0

Microsoft

Oracle

IBM

Informatica

Sap

SAS

Qlikview

Cloudera

Machine Learning