פוסטים

עמודות וירטואליות

בשבוע הבא אני מעביר הרצאה בנושא פיצ'רים חדשים בבסיס הנתונים של אורקל 11 עם דגש על דברים שיכולים לעניין מפתחים של data warehouse. הפוסטים הקרובים יעסקו בנושאים שאני אציג בהרצאה.

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

המשך קריאה…

יצירת קובץ CSV על ידי שימוש ב-SQLPLUS

היום התבקשתי על ידי אחת המפתחות לעזור לה לשמור שליפה של 230 עמודות ולמעלה מ-50 מליון רשומות לקובץ CSV. מבחינתי זו הזדמנות טובה לתעד את זה המסקנות שלי מהבעיה והפתרון היחסית גנרי שיצרתי בשבילו.

שליפות ב-sqlplus מחזירות בדרך כלל את הרשומות באחד משתי דרכים: הדרך הראשונה היא fixed length columns (כלומר העמודה הראשונה מתחילה תמיד במיקום 1, העמודה השנייה תמיד במיקום 7 וכן הלאה). הדרך השנייה היא כ-HTML ועל זה נדבר בהזדמנות אחרת. קובץ CSV הוא בסופו של דבר קובץ טקסט לכל דבר שבו העמודות (ערכים) מופרדים על ידי פסיקים (ומכאן שמו: Comma-separated values).

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

המשך קריאה…

שימוש ב-with כדי לפשט שליפות

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

נתחיל בשיעור היסטוריה קצר כדי להבין מה זה בעצם אומר. כידוע, SQL היא לא שפה ייחודית לאורקל – זו שפה עם סטנדרטים שנקבעים על ידי ANSI. הגרסה הראשונה של השפה שעברה סטנדרטיזציה הייתה בשנת 1986 עם הוצאת SQL86.  בשנת 92 יצאה גרסה נוספת (SQL92) שהייתה גם הגרסה הראשונה שאורקל ניסתה להתאים את עצמה אליה בגרסת Oracle 8. בשנת 1999 יצאה גרסה חדשה ומורחבת של השפה (SQL99) שכללה הרבה מהתכונות שהיו באורקל לפני זה (triggers, recursive sql ועוד) ואורקל התאימו את עצמם שוב למרבית התקנים החדשים בגרסה Oracle 9i (אם אני לא טועה זה היה בגרסה 9.2).

המשך קריאה…

איך להבין מה expdp או impdp עושה כרגע

בגרסה 10g התחילו באורקל להחליף את מנגנון ה-export/import בכלי מתוחכם בהרבה בשם expdp/impdp (כלומר export data pump או import data pump). הכלי החדש תומך בין השאר ביצוא ויבוא של נתונים בצורה מהירה בהרבה ואפילו בפעולות מקביליות.

הבעיה היא שלמרות הכלי המתוחכם, לפעמים המנגנון הזה עובד קצת לאט ואז נוצרת בעיה: איך לזהות מה קורה עם ה-export או ה-import שלי? כדי לענות על השאלה הזו צריך להפריד בין כמה רמות של שאלה.

המשך קריאה…

ביצועים גרועים באיסוף סטטיסטיקות על פרטישנים

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

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

הפוסט השני שעסק פחות או יותר באותו עניין אך בגרסה אחרת היה בבלוג של Martin Widlake. במקרה הזה הוא מתאר מצב שאיסוף הסטטיסטיקות על הפרטישנים בטבלה היה איטי מכוון שלא היו סטטיסטיקות על אינדקס גלובלי שהוגדר על הטבלה. במקרה הזה הפתרון שלו היה איסוף סטטיסטיקות מינימליות (0.01%) על האינדקס ואז האיסוף השתחרר.

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

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

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

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

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

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