ראיתי את העתיד והוא מרהיב: SQLcl הדור הבא של SQL*Plus כבר בדרך

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

הכלי הזה, שכמעט כל מי שעובד עם אורקל מכיר, הוא כלי command line לעבודה עם בסיס הנתונים שנמצא איתנו כבר הרבה מאוד שנים. זה אחד הכלים הכי נוחים להבנה, הכי נוחים לתפעול והוא עובד מעולה עם סקריפטים. יש לו אינטגרציה עם הכלים של קלאסטר (לדוגמה, אם עושים shutdown איתו אז הקלסטר יודע שזה בכוונה ולא מנסה להרים את ה-node מחדש) ואפילו כלים אחרים שאורקל מספקים משתמשים בו וביכולות שלו לעיתים קרובות.

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

לאחרונה נחשפתי לכלי חדש של אורקל שבא לתת ממשק command line תואם sqlplus אבל עם יכולות חדשות ומגניבות: SQLcl והתלהבתי בטירוף.

המשך קריאה…

שליפה כדי לראות tablespace map

הנה שליפה קצרה שאני תמיד מחפש אותה במצבי “חרום” אבל בסוף מוצא את עצמי כותב אותה מחדש…

הבעיה: אני רוצה לפנות מקום פנוי ב-tablespace אבל ה-high water mark חסום על ידי איזשהו אובייקט (אני משתמש בסקריפט הזה לפינוי מקום ב-tablespace). בדרך כלל המחשבה הבאה שלי זה "נו? אז מה חוסם אותי עכשיו?".

הפתרון: השליפה הבאה. היא מביאה את ה- tablespace map מסודר לפי קבצים ומסמנת גם את הבלוקים התפוסים (ועל ידי מה) וגם את הבלוקים הפנויים.
המשך קריאה…

קורס SQL למתחילים מקוון – המלצה לבלוג של רם קדם

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

לפני כמה שבועות הדרכתי קורס SQL (השפה, לא SQL Server) אצל לקוח. תמיד כיף ללמד קורס של חומר שלמדתי בעצמי לפני כמעט 15 שנה, אבל במהלך הקורס הבנתי כמה השפה הזו מרשימה וכמה מאמצים הושקעו במשך השנים כדי ליצור שפה שהיא אינטואיטיבית מצד אחד אבל עוצמתית מצד שני.

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

גולת הכותרת של הבלוג שלו היא קורס SQL למתחילים – הן באורקל והן ב-SQL Server. המדריך כולל הסברים, תרגולים ופתרונות. אני מאוד ממליץ על הבלוג שלו ומאחל לו המון בהצלחה! 🙂

טיפ: שליפה של השליפות הארוכות בשבוע האחרון (מתוך ה-AWR)

טיפ נחמד ושימושי – איך לשלוף מתוך הטבלאות של ה-AWR את השליפות הארוכות ביותר בשבוע האחרון.
השליפה שולפת את עשר השליפות בעלות הזמן המצטבר הגבוה ביותר. ניתן (וכדאי) לסנן את השליפה הזו עם Parsing Schema ספציפי כדי לקבל מידע שניתן לעבד אותו ולעבוד עליו כראוי:

המשך קריאה…

כמה מילים על bind peeking ואיך למחוק Execution Plan מה-Library Cache

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

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

אחד הדברים הקשים ביותר לכוונון בעיני זה שליפות שלפעמים עובדות מהר ולפעמים לא ובתת הקטגוריה הזו, שליפות שמתנהגות ככה אבל לכולן יש את אותו ה-SQL ID ואותו Execution Plan (באותה סביבה, כמובן). איך דבר כזה יכול לקרות? לדוגמה אם משתמשים ב-Bind Variables אז התוכנית של השליפה מתוכננת על ידי ה-Optimizer פעם אחת וכל השליפות שבאות אחריה עושות soft parse וחוסכות לעצמן את הצורך ב-parse מיותר.
כל זה טוב ויפה אבל איך האופטימייזר יודע להעריך כמויות רשומות ותוכנית יעילה? בגרסה 9i נוספה תכונה מעניינת: Bind Peeking. האופטימייזר שנתקל בשליפה עם bind variables בפעם הראשונה "מציץ" לתוך המשתנים האלה, רואה איזה ערכים יש שם ומשתמש בהם כדי לקבוע תוכנית פעולה לשליפה שלנו.

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

רגע, רגע, מה?!
המשך קריאה…

השהיית פקודה כאשר יש בעיית מקום ב-tablespace

נניח שיש לנו טרנזאקציה של פקודת insert ארוכה במיוחד (כזו שלוקחת שעות) ובאמצע ה-insert מרפי קופץ לביקור ונגמר המקום ב-tablespace של הטבלה. על פניו, אירוע מצער שאי אפשר להתגבר אליו אלא להתחיל מחדש, נכון? אז זהו שלא. ישנו פיצ'ר בשם Resumable Space Allocation שמאפשר לנו להכניס את ה-session להשהייה ולהמתין פרק זמן מוגדר כדי שנוכל לטפל בבעיה. ברגע שנטפל בבעיה, ה-session שלנו ימשיך כרגיל באופן אוטומטי, כאילו לא קרה שום דבר.

זה לא פיצ'ר חדש במיוחד – למעשה הוא קיים כבר מגרסה 9i – אבל הופתעתי היום לגלות שיש מפתחים (ויותר גרוע, DBA-ים) שפשוט לא מכירים את זה. בוא נראה איך אפשר להשתמש בכלי החשוב הזה.
המשך קריאה…