הכלי להמחשת תוכנית לביצוע שאילתה מאפשר לכם להבין במהירות את המבנה של תוכנית לביצוע השאילתה שנבחרה על ידי Spanner כדי להעריך שאילתה. במדריך הזה מוסבר איך להשתמש בתוכנית שאילתות כדי להבין את ההפעלה של השאילתות.
לפני שמתחילים
כדי להכיר את חלקי ממשק המשתמש של מסוף Google Cloud שמוזכרים במדריך הזה, כדאי לקרוא את המאמרים הבאים:
הרצת שאילתה במסוף Google Cloud
- נכנסים לדף Instances של Spanner במסוף Google Cloud .
-
בוחרים את שם המופע שמכיל את מסד הנתונים שרוצים לשלוח לו שאילתה.
במסוףGoogle Cloud מוצג הדף Overview של המופע.
-
בוחרים את שם מסד הנתונים שרוצים לשלוח לו שאילתה.
בדף Overview במסוףGoogle Cloud מוצג מסד הנתונים.
-
בתפריט הצד, לוחצים על 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.
הקלט מוצג בצבעים שונים, ומספרי השורות מתווספים אוטומטית עבור הצהרות של כמה שורות.
אם מזינים יותר מהצהרה אחת בעורך, צריך להשתמש בנקודה-פסיק לסיום אחרי כל הצהרה, חוץ מהאחרונה.
- בחלונית התחתונה של כרטיסיית שאילתה יש את כרטיסיות המשנה הבאות:
- בכרטיסיית המשנה Results מוצגות התוצאות כשמריצים את ההצהרות בעורך. בשביל שאילתות מוצגת טבלת תוצאות, ובשביל הצהרות DML כמו
INSERTו-UPDATEמוצגת הודעה לגבי מספר השורות שהושפעו.אפשר גם ללחוץ על ייצוא כדי לייצא את תוצאות השאילתה. היא מספקת את האפשרויות הבאות:
- הורדה בפורמט CSV
- הורדת קובץ JSON
- ייצוא ל-Google Sheets
- העתקה ללוח (CSV)
- העתקה ללוח (TSV)
- העתקה ללוח (JSON)
- בכרטיסיית המשנה Explanation מוצגים תרשימים חזותיים של תוכניות השאילתות שנוצרו כשמריצים את ההצהרות בעורך.
- בכרטיסיית המשנה Results מוצגות התוצאות כשמריצים את ההצהרות בעורך. בשביל שאילתות מוצגת טבלת תוצאות, ובשביל הצהרות 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 ביחס לאופרטורים אחרים ומחזירים מספרים משמעותיים של שורות נתונים. אם קיימים פרמטרים אוטומטיים, הם מילולי SQL שהומרו לשמות פרמטרים שנוצרו אוטומטית במהלך קומפילציית השאילתה.
- ציר זמן של ביצוע השאילתה הוא תרשים שמבוסס על זמן ומראה כמה זמן כל קבוצת מכונות הפעילה את החלק שלה בשאילתה. יכול להיות שקבוצת מכונות לא תפעל במשך כל משך זמן הריצה של השאילתה. יכול להיות גם שקבוצת מכונות הופעלה כמה פעמים במהלך הפעלת השאילתה, אבל ציר הזמן כאן מייצג רק את ההתחלה של ההפעלה הראשונה ואת הסיום של ההפעלה האחרונה.
שיפור שאילתה שמניבה ביצועים נמוכים
נניח שהחברה שלכם מפעילה מסד נתונים של סרטים באינטרנט, שמכיל מידע על סרטים כמו צוות השחקנים, חברות ההפקה, פרטי הסרט ועוד. השירות פועל ב-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 מיליון שורות נסרקו ובסופו של דבר הוחזרו פחות מ-64,000 שורות.
בנוסף, בחלונית ציר הזמן של הרצת השאילתה אפשר לראות ש-4 קבוצות של מכונות היו מעורבות בשאילתה. קבוצת מכונות אחראית להרצת חלק מהשאילתה. אופרטורים יכולים לפעול במכונה אחת או יותר. כשבוחרים קבוצת מכונות בציר הזמן, החלק של השאילתה שהופעל על הקבוצה הזו מודגש בתוכנית החזותית.
בגלל הגורמים האלה, אתם מחליטים שאפשר לשפר את הביצועים על ידי שינוי הפעולה join מ-apply join, ש-Spanner בחר כברירת מחדל, ל-hash join.
שיפור השאילתה
כדי לשפר את הביצועים של השאילתה, משתמשים ברמז לצירוף כדי לשנות את שיטת הצירוף לצירוף גיבוב (hash). ההטמעה של הצירוף הזה מבצעת עיבוד מבוסס-קבוצות.
הנה השאילתה המעודכנת:
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 %'. חיפוש בטבלה אחרת עם כל כך הרבה שורות כנראה יהיה יקר. שינוי ההטמעה של הצירוף לצירוף גיבוב שיפר משמעותית את הביצועים.
המאמרים הבאים
לעיון בחומר עזר מלא בנושא תוכניות לביצוע שאילתות, אפשר לעבור אל תוכניות לביצוע שאילתות.
רשימה מלאה של האופרטורים זמינה במאמר אופרטורים להרצת שאילתות.