הכלי להמחשת תוכנית שאילתה מאפשר לכם להבין במהירות את המבנה של תוכנית השאילתה שנבחרה על ידי Spanner כדי להעריך שאילתה. במדריך הזה מוסבר איך אפשר להשתמש בתוכנית שאילתות כדי להבין את ההפעלה של השאילתות.
לפני שמתחילים
כדי להכיר את חלקי ממשק המשתמש של מסוף Google Cloud שמוזכרים במדריך הזה, כדאי לקרוא את המאמרים הבאים:
הרצת שאילתה במסוף Google Cloud
- נכנסים לדף Instances של Spanner במסוף Google Cloud .
-
בוחרים את שם המופע שמכיל את מסד הנתונים שרוצים לשלוח לו שאילתה.
במסוףGoogle Cloud מוצג הדף Overview של המופע.
-
בוחרים את שם מסד הנתונים שרוצים לשלוח לו שאילתה.
במסוףGoogle Cloud מוצג הדף Overview של מסד הנתונים.
-
בתפריט הצדדי, לוחצים על Spanner Studio.
מסוףGoogle Cloud מציג את הדף Spanner Studio של מסד הנתונים.
- מזינים את שאילתת ה-SQL בחלונית העריכה.
-
לוחצים על Run.
מערכת Spanner מריצה את השאילתה.
- לוחצים על הכרטיסייה הסבר כדי לראות את התרשים של תוכנית השאילתה.
סיור בעורך השאילתות
בדף Spanner Studio יש כרטיסיות של שאילתות שבהן אפשר להקליד או להדביק שאילתות SQL והצהרות DML, להריץ אותן על מסד הנתונים ולראות את התוצאות ואת תוכניות הביצוע של השאילתות. רכיבי המפתח של הדף Spanner Studio ממוספרים בצילום המסך הבא.
- בסרגל הכרטיסיות מוצגות כרטיסיות השאילתות שפתוחות. כדי ליצור כרטיסייה חדשה, לוחצים על כרטיסייה חדשה.
אתם יכולים גם להשתמש ב-Gemini Code Assist כדי לקבל עזרה מבוססת-AI. מידע נוסף מופיע במאמר בנושא כתיבת SQL בעזרת Gemini.
- סרגל הפקודות של העורך כולל את האפשרויות הבאות:
- הפקודה Run מריצה את ההצהרות שהוזנו בחלונית העריכה, ומציגה את תוצאות השאילתה בכרטיסייה Results ואת תוכניות הביצוע של השאילתה בכרטיסייה Explanation. משנים את התנהגות ברירת המחדל באמצעות התפריט הנפתח כדי לקבל תוצאות בלבד או הסבר בלבד.
אם מדגישים משהו בעורך, הפקודה Run משתנה לRun selected, וכך אפשר להריץ את מה שהודגש.
- הפקודה Save (שמירה) מאפשרת ליצור, לשמור ולנהל סקריפטים של SQL בתור שאילתות שמורות. מידע נוסף מופיע במאמר בנושא סקירה כללית על שאילתות שמורות.
- הפקודה Format מעצבת את ההצהרות בעורך כך שיהיה קל יותר לקרוא אותן.
- הפקודה Clear מוחקת את כל הטקסט בעורך ומנקה את כרטיסיות המשנה Results ו-Explanation.
- הקישור Documentation פותח כרטיסיית דפדפן עם תיעוד של Spanner בנושא תחביר של שאילתות SQL.
השאילתות עוברות אימות אוטומטי בכל פעם שהן מתעדכנות בכלי העריכה. אם ההצהרות תקינות, בסרגל הפקודות של העורך מוצג סימן וי לאישור וההודעה תקין. אם יש בעיות, תוצג הודעת שגיאה עם פרטים.
- הפקודה Run מריצה את ההצהרות שהוזנו בחלונית העריכה, ומציגה את תוצאות השאילתה בכרטיסייה Results ואת תוכניות הביצוע של השאילתה בכרטיסייה Explanation. משנים את התנהגות ברירת המחדל באמצעות התפריט הנפתח כדי לקבל תוצאות בלבד או הסבר בלבד.
- בעורך מזינים שאילתות SQL והצהרות DML.
הקלט מוצג עם קידוד צבעוני, ומספרי השורות מתווספים אוטומטית עבור הצהרות מרובות שורות.
אם מזינים יותר מהצהרה אחת בעורך, צריך להשתמש בנקודה-פסיק לסיום אחרי כל הצהרה, חוץ מהאחרונה.
- בחלונית התחתונה של כרטיסיית שאילתה יש את כרטיסיות המשנה הבאות:
- בכרטיסיית המשנה תוצאות מוצגות התוצאות כשמריצים את ההצהרות בעורך. לשאילתות מוצגת טבלת תוצאות, ולמשפטי DML כמו
INSERTו-UPDATEמוצגת הודעה לגבי מספר השורות שהושפעו.אפשר גם ללחוץ על ייצוא כדי לייצא את תוצאות השאילתה. היא מספקת את האפשרויות הבאות:
- הורדה בפורמט CSV
- הורדת קובץ JSON
- ייצוא ל-Google Sheets
- העתקה ללוח (CSV)
- העתקה ללוח (TSV)
- העתקה ללוח (JSON)
- בכרטיסיית המשנה Explanation מוצגים תרשימים חזותיים של תוכניות השאילתות שנוצרות כשמריצים את ההצהרות בעורך.
- בכרטיסיית המשנה תוצאות מוצגות התוצאות כשמריצים את ההצהרות בעורך. לשאילתות מוצגת טבלת תוצאות, ולמשפטי DML כמו
הצגת תוכניות שאילתה שנדגמו
- נכנסים לדף Instances של Spanner במסוף Google Cloud .
-
לוחצים על השם של המופע עם השאילתות שרוצים לבדוק.
במסוףGoogle Cloud מוצג הדף Overview של המופע.
-
בתפריט Navigation (ניווט) ובקטע Observability (יכולת צפייה), לוחצים על Query insights (תובנות לגבי שאילתות).
בדף Query insights במסוףGoogle Cloud מוצגים נתונים על המופע.
-
בתפריט הנפתח מסד נתונים, בוחרים את מסד הנתונים עם השאילתות שרוצים לבדוק.
במסוףGoogle Cloud מוצג מידע על עומס השאילתות במסד הנתונים. בטבלה TopN queries and tags מוצגת רשימה של השאילתות והתגים של הבקשות המובילות, ממוינים לפי ניצול CPU.
-
מחפשים את השאילתה עם ניצול גבוה של CPU שרוצים לראות עבורה תוכניות שאילתה לדוגמה. לוחצים על הערך FPRINT של השאילתה הזו.
בדף פרטי שאילתה מוצג תרשים של דוגמאות לתוכניות שאילתה לאורך זמן. אפשר להקטין את התצוגה עד שבעה ימים לפני השעה הנוכחית. הערה: לא ניתן להשתמש בתוכניות שאילתה בשאילתות עם partitionTokens שהתקבלו מ-PartitionQuery API ובשאילתות Partitioned DML.
-
לוחצים על אחת הנקודות בתרשים כדי לראות תוכנית שאילתות ישנה יותר ולצפות בשלבים שבוצעו במהלך הפעלת השאילתה. אפשר גם ללחוץ על כל אופרטור כדי לראות מידע מורחב עליו.
איור 8. גרף של דוגמאות לתוכניות שאילתות.
במקרים מסוימים, יכול להיות שתרצו להציג תוכניות שאילתות לדוגמה ולהשוות את הביצועים של שאילתה לאורך זמן. לגבי שאילתות שצורכות יותר CPU, מערכת Spanner שומרת תוכניות שאילתה שנדגמו למשך 30 יום בדף תובנות לגבי שאילתות במסוף Google Cloud . כדי להציג תוכניות שאילתה שנדגמו:
סיור בכלי להמחשת תוכנית השאילתה
הרכיבים העיקריים של הוויזואלייזר מסומנים בהערות בצילום המסך הבא ומתוארים בפירוט. אחרי שמריצים שאילתה בכרטיסיית שאילתה, בוחרים בכרטיסייה EXPLANATION מתחת לעורך השאילתות כדי לפתוח את כלי ההמחשה של תוכנית הביצוע של השאילתה.
זרימת הנתונים בתרשים הבא היא מלמטה למעלה, כלומר כל הטבלאות והאינדקסים נמצאים בתחתית התרשים והפלט הסופי נמצא בחלק העליון.
- ההדמיה של התוכנית יכולה להיות גדולה, בהתאם לשאילתה שהפעלתם. כדי להסתיר או להציג את הפרטים, מעבירים את המתג של בורר התצוגה מורחבת/תמציתית. אפשר להתאים אישית את החלק מהתוכנית שמוצג בכל רגע באמצעות אמצעי הבקרה של הזום.
- האלגברה שמסבירה איך Spanner מריץ את השאילתה מוצגת כגרף אציקלי, שבו כל צומת מתאים לאיטרטור שצורכת שורות מהקלט שלה ומייצרת שורות עבור ההורה שלה. איור 9 מציג תוכנית לדוגמה. כדי לראות תצוגה מורחבת של חלק מפרטי התוכנית, לוחצים על הדיאגרמה.
איור 9. תוכנית חזותית לדוגמה (לוחצים כדי להגדיל).
כל צומת, או כרטיס, בתרשים מייצג איטרטור ומכיל את הפרטים הבאים:
- שם האיטרטור. איטרטור צורך שורות מהקלט שלו ומפיק שורות.
- נתונים סטטיסטיים של זמן הריצה שמראים כמה שורות הוחזרו, מה היה זמן האחזור וכמה מעבד נצרך.
- אנחנו מספקים את הסימנים החזותיים הבאים כדי לעזור לכם לזהות בעיות פוטנציאליות בתוכנית הביצוע של השאילתה.
- הפסים האדומים בצומת הם אינדיקטורים חזותיים של אחוז זמן האחזור או זמן המעבד (CPU) של האיטרטור הזה בהשוואה לסך הכולל של השאילתה.
- העובי של הקווים שמחברים בין כל צומת מייצג את מספר השורות. ככל שהקו עבה יותר, כך מספר השורות גדול יותר שמועברות לצומת הבא. המספר בפועל של השורות מוצג בכל כרטיס, וגם כשמעבירים את מצביע העכבר מעל מחבר.
- משולש אזהרה מוצג בצומת שבו בוצע סריקה מלאה של הטבלה. בחלונית המידע יש פרטים נוספים, כולל המלצות כמו הוספת אינדקס או שינוי השאילתה או הסכימה בדרכים אחרות, אם אפשר, כדי להימנע מסריקה מלאה.
- בוחרים כרטיס בתוכנית כדי לראות את הפרטים בחלונית המידע בצד שמאל (5).
- במפה הקטנה של תוכנית הביצוע מוצגת תצוגה מוקטנת של התוכנית המלאה. היא שימושית כדי להבין את הצורה הכללית של תוכנית הביצוע וכדי לנווט במהירות לחלקים שונים בתוכנית. כדי לעבור לחלק אחר בתוכנית החזותית, גוררים ישירות במפה המיניאטורית או לוחצים במקום שבו רוצים להתמקד.
בוחרים באפשרות DOWNLOAD JSON כדי להוריד גרסת JSON של תוכנית ההפעלה, שיכולה לעזור בפתרון בעיות. אפשר גם לשתף אותו כשפונים לצוות Spanner לקבלת תמיכה. שמירת ה-JSON לא שומרת את תוצאת השאילתה.
כדי להוריד ולשמור גרסת JSON של תוכנית הביצוע כדי להציג אותה בהמשך:
- ב-Spanner Studio, מריצים שאילתה.
- לוחצים על הכרטיסייה הסבר.
- לוחצים על הורדת קובץ JSON כדי להוריד את גרסת ה-JSON של תוכנית הביצוע.
- שומרים ומעתיקים את התוכן של קובץ ה-JSON.
- פותחים כרטיסייה חדשה של עורך השאילתות.
- בכרטיסיית העורך, מזינים:
PROTO: CONTENT_OF_JSON
- לוחצים על Run.
- בוחרים בכרטיסייה הסבר מתחת לעורך השאילתות כדי לראות ייצוג חזותי של תוכנית הביצוע שהורדה.
- בחלונית המידע מוצג מידע הקשרי מפורט על הצומת שנבחר בתרשים של תוכנית השאילתה. המידע מאורגן בקטגוריות הבאות.
- מידע על איטרטור מספק פרטים ונתונים סטטיסטיים בזמן ריצה לגבי כרטיס האיטרטור שבחרתם בגרף.
- סיכום השאילתה מספק פרטים על מספר השורות שהוחזרו ועל הזמן שנדרש להרצת השאילתה. אופרטורים בולטים הם אלה שמציגים חביון משמעותי, צורכים כמות משמעותית של CPU ביחס לאופרטורים אחרים ומחזירים מספרים משמעותיים של שורות נתונים.
- ציר זמן של ביצוע השאילתה הוא תרשים שמבוסס על זמן ומראה כמה זמן כל קבוצת מכונות הפעילה את החלק שלה בשאילתה. יכול להיות שקבוצת מכונות לא תפעל לאורך כל משך זמן הריצה של השאילתה. יכול להיות שקבוצת מכונות הריצה פעלה כמה פעמים במהלך הפעלת השאילתה, אבל ציר הזמן כאן מייצג רק את ההתחלה של הפעם הראשונה שבה היא פעלה ואת הסיום של הפעם האחרונה שבה היא פעלה.
שיפור שאילתה שמניבה ביצועים נמוכים
נניח שהחברה שלכם מפעילה מסד נתונים של סרטים באינטרנט שמכיל מידע על סרטים, כמו צוות השחקנים, חברות ההפקה, פרטי הסרט ועוד. השירות פועל ב-Spanner, אבל לאחרונה היו בו כמה בעיות בביצועים.
בתור מפתח ראשי של השירות, התבקשת לחקור את בעיות הביצועים האלה כי הן גורמות לדירוגים נמוכים של השירות. פותחים את מסוף Google Cloud , עוברים למופע של מסד הנתונים ואז פותחים את עורך השאילתות. מזינים את השאילתה הבאה בעורך ומפעילים פתרונות חכמים.
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
בצילום המסך הבא מוצגת התוצאה של הפעלת השאילתה הזו. בחרנו באפשרות עיצוב השאילתה כדי לעצב את השאילתה בעורך. בנוסף, בפינה השמאלית העליונה של המסך מופיעה הערה שמציינת שהשאילתה תקינה.
בכרטיסייה RESULTS שמתחת לעורך השאילתות אפשר לראות שהשאילתה הושלמה תוך קצת יותר משתי דקות. אתם מחליטים לבדוק את השאילתה כדי לראות אם היא יעילה.
ניתוח שאילתה איטית באמצעות כלי ההדמיה של תוכנית השאילתה
בשלב הזה, אנחנו יודעים שהשאילתה בשלב הקודם נמשכת יותר משתי דקות, אבל אנחנו לא יודעים אם השאילתה יעילה ככל האפשר, ולכן לא יודעים אם משך הזמן הזה צפוי.
בוחרים בכרטיסייה EXPLANATION (הסבר) שמתחת לעורך השאילתות כדי לראות ייצוג חזותי של תוכנית ההפעלה ש-Spanner יצר כדי להריץ את השאילתה ולהחזיר תוצאות.
התוכנית שמוצגת בצילום המסך הבא היא גדולה יחסית, אבל גם ברמת הזום הזו אפשר לראות את הדברים הבאים.
על סמך סיכום השאילתה בחלונית המידע בצד שמאל, אנחנו רואים שכמעט 3 מיליון שורות נסרקו ופחות מ-64K הוחזרו בסופו של דבר.
בנוסף, בחלונית ציר הזמן של הרצת השאילתה אפשר לראות ש-4 קבוצות של מכונות היו מעורבות בשאילתה. קבוצת מכונות אחראית להרצת חלק מהשאילתה. אופרטורים יכולים לפעול במכונה אחת או יותר. כשבוחרים קבוצת מכונות בציר הזמן, החלק של השאילתה שבוצע בקבוצה הזו מודגש בתוכנית החזותית.
בגלל הגורמים האלה, אתם מחליטים שאפשר לשפר את הביצועים על ידי שינוי הפעולה join מ-apply join, ש-Spanner בחר בה כברירת מחדל, ל-hash join.
שיפור השאילתה
כדי לשפר את הביצועים של השאילתה, משתמשים ברמז לצירוף כדי לשנות את שיטת הצירוף לצירוף גיבוב. ההטמעה של ה-join הזה מבצעת עיבוד מבוסס-קבוצות.
הנה השאילתה המעודכנת:
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note HAVING MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
בצילום המסך הבא מוצגת השאילתה המעודכנת. כפי שניתן לראות בצילום המסך, השאילתה הושלמה תוך פחות מ-5 שניות, שיפור משמעותי לעומת זמן הריצה של 120 שניות לפני השינוי הזה.
כדאי לבדוק את התוכנית החזותית החדשה שמוצגת בדיאגרמה הבאה כדי להבין מה היא אומרת לנו על השיפור הזה.
מיד אפשר להבחין בכמה הבדלים:
רק קבוצת מכונות אחת הייתה מעורבת בהרצת השאילתה הזו.
מספר הצבירות צומצם באופן משמעותי.
סיכום
בדוגמה הזו, הפעלנו שאילתה איטית ובדקנו את התוכנית החזותית שלה כדי לחפש חוסר יעילות. לפניכם סיכום של השאילתות והתוכניות לפני ואחרי ביצוע השינויים. בכל כרטיסייה מוצגת השאילתה שהופעלה ותצוגה קומפקטית של ההדמיה של תוכנית הביצוע המלאה של השאילתה.
לפני
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
אחרי
SELECT
t.title,
MIN(t.production_year) AS year,
ANY_VALUE(mc.note
HAVING
MIN t.production_year) AS note
FROM
title AS t
JOIN
@{join_method=hash_join} movie_companies AS mc
ON
t.id = mc.movie_id
WHERE
t.title LIKE '% the %'
GROUP BY
title;
סימן לכך שאפשר לשפר משהו בתרחיש הזה הוא שחלק גדול מהשורות בטבלה title עומד בדרישות של המסנן LIKE
'% the %'. חיפוש בטבלה אחרת עם כל כך הרבה שורות כנראה יהיה יקר. שינוי ההטמעה של הצירוף לצירוף גיבוב שיפר משמעותית את הביצועים.
המאמרים הבאים
לעיון בחומר עזר מלא בנושא תוכניות שאילתות, אפשר לעיין במאמר תוכניות להרצת שאילתות.
רשימה מלאה של האופרטורים זמינה במאמר אופרטורים להרצת שאילתות.