בדף הזה מוסבר איך להשתמש בלוח הבקרה 'תובנות לגבי שאילתות' כדי לזהות ולנתח בעיות בביצועים של Spanner.
סקירה כללית של תובנות לגבי שאילתות
התכונה 'תובנות לגבי שאילתות' עוזרת לכם לזהות בעיות בביצועים של שאילתות ושל הצהרות DML (INSERT, UPDATE ו-DELETE) במסד נתונים של Spanner, ולאבחן אותן. הוא תומך במעקב אינטואיטיבי ומספק מידע לאבחון שעוזר לכם לזהות את שורש הבעיה בביצועים, ולא רק לגלות אותה.
תובנות לגבי שאילתות עוזרות לכם לשפר את הביצועים של שאילתות Spanner. לשם כך, התובנות מנחות אתכם בשלבים הבאים:
- קובעים אם שאילתות לא יעילות גורמות לניצול גבוה של CPU.
- זיהוי שאילתה או תג שעלולים לגרום לבעיות.
- מנתחים את התג של השאילתה או הבקשה כדי לזהות בעיות.
התובנות לגבי שאילתות זמינות בהגדרות של אזור יחיד ושל מספר אזורים.
תמחור
השימוש בתובנות לגבי שאילתות לא כרוך בעלות נוספת.
שמירת נתונים
הנתונים ב'תובנות לגבי שאילתות' נשמרים למשך 30 ימים לכל היותר.
לגרף Total CPU Utilization (per Query or Request tag), Spanner מאחזר נתונים מהטבלאות SPANNER_SYS.QUERY_STATS_TOP_*. הנתונים בטבלאות האלה נשמרים למשך 30 ימים לכל היותר. מידע נוסף על שמירת נתונים
התפקידים הנדרשים
תצטרכו תפקידים והרשאות שונים ב-IAM בהתאם לסוג המשתמש: משתמש IAM או משתמש עם בקרת גישה ברמת גרנולריות גבוהה.
משתמש בניהול זהויות והרשאות גישה (IAM)
כדי לקבל את ההרשאות שדרושות לצפייה בדף תובנות שאילתות, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM במכונה:
- צפייה ב-Cloud Spanner (
roles/spanner.viewer) - Cloud Spanner Database Reader (
roles/spanner.databaseReader)
כדי לצפות בדף תובנות שאילתות, נדרשות ההרשאות הבאות בתפקיד Cloud Spanner Database Reader(
roles/spanner.databaseReader):
spanner.databases.beginReadOnlyTransactionspanner.databases.selectspanner.sessions.create
משתמש עם בקרת גישה פרטנית
אם אתם משתמשים בבקרת גישה פרטנית, ודאו שאתם:
- צפייה ב-Cloud Spanner(
roles/spanner.viewer) - יש להם הרשאות גישה פרטניות, והם קיבלו את
spanner_sys_readerתפקיד המערכת או אחד מתפקידי החברים שלו. - בדף הסקירה הכללית של מסד הנתונים, בוחרים באפשרות
spanner_sys_readerאו בתפקיד של חבר/ה בתור תפקיד המערכת הנוכחי.
מידע נוסף זמין במאמרים מידע על בקרת גישה ברמת פירוט גבוהה ותפקידים במערכת של בקרת גישה ברמת פירוט גבוהה.
מרכז הבקרה Query insights
במרכז הבקרה 'תובנות לגבי שאילתות' מוצג עומס השאילתות על סמך מסד הנתונים וטווח התאריכים שבוחרים. עומס השאילתות הוא מדד של ניצול המעבד הכולל לכל השאילתות במופע בטווח התאריכים שנבחר. במרכז הבקרה יש סדרה של מסננים שעוזרים לכם לראות את עומס השאילתות.
כדי לצפות בלוח הבקרה 'תובנות לגבי שאילתות' של מסד נתונים:
- בחלונית הניווט שמימין, לוחצים על תובנות לגבי שאילתות. מרכז הבקרה Query insights ייפתח.
- בוחרים מסד נתונים מהרשימה Databases. בלוח הבקרה מוצג מידע על עומס השאילתות במסד הנתונים.
האזורים במרכז הבקרה כוללים את:
- רשימת מסדי נתונים: סינון עומס השאילתות במסד נתונים ספציפי או בכל מסדי הנתונים.
- מסנן טווח תאריכים: מסנן את עומס השאילתות לפי טווחי תאריכים, כמו שעות, ימים או טווח מותאם אישית.
- תרשים של סך ניצול המעבד (כל השאילתות): מוצג בו השיעור הממוצע המצטבר של השימוש במעבד (בשניות מעבד לדקה) של כל השאילתות.
- תרשים של סך השימוש במעבד (לכל תג שאילתה או בקשה): מוצג בו השיעור הממוצע של השימוש במעבד (בשניות מעבד לדקה) לפי כל תג שאילתה או בקשה.
- טבלה של שאילתות ותגי בקשה מסוג TopN: מוצגת רשימה של השאילתות המובילות ותגי הבקשה, ממוינים לפי ניצול CPU. איך מזהים שאילתה או תג שעלולים לגרום לבעיות

ביצועים של לוחות בקרה
כדי לשפר את הביצועים של Query Insights, השתמשו בפרמטרים של שאילתות או תייגו את השאילתות. אם לא תגדירו פרמטרים או תתייגו את השאילתות, יכול להיות שיוחזרו יותר מדי תוצאות, ולכן יכול להיות שהטבלה TopN queries and tags לא תיטען כמו שצריך.
איך בודקים אם שאילתות לא יעילות גורמות לניצול גבוה של המעבד (CPU)
המדד 'סך השימוש במעבד' מייצג את השיעור הממוצע של השימוש במעבד (בשניות מעבד לדקה) שהשאילתות שהופעלו במסד הנתונים שנבחר מבצעות לאורך זמן.

כדאי לעיין בתרשים כדי לבדוק את השאלות הבאות:
איזה מסד נתונים חווה את העומס? כדי למצוא את מסדי הנתונים עם העומסים הכי גבוהים, בוחרים מסדי נתונים שונים מהרשימה Databases. כדי לדעת באיזה מסד נתונים העומס הכי גבוה, אפשר גם לבדוק את התרשים CPU utilization - total של מסדי הנתונים במסוףGoogle Cloud .

האם ניצול המעבד (CPU) גבוה? האם יש קפיצות בתרשים או שהערכים גבוהים לאורך זמן? אם ניצול המעבד (CPU) לא גבוה, הבעיה היא לא בשאילתות.
כמה זמן ניצול המעבד (CPU) גבוה? האם הייתה עלייה חדה לאחרונה או שהערך היה גבוה באופן עקבי במשך זמן מה? אפשר להשתמש בבורר הטווחים כדי לבחור תקופות זמן שונות ולבדוק כמה זמן הבעיה נמשכה. מגדילים את התצוגה כדי לראות חלון זמן שבו נצפו עליות חדות בעומס השאילתות. מקטינים את התצוגה כדי לראות עד שבוע אחד בציר הזמן.
אם רואים עלייה חדה או עלייה הדרגתית בגרף שמתאימה לשימוש הכולל במעבד של המופע, סביר להניח שהסיבה לכך היא שאילתה אחת או יותר שצורכות הרבה משאבים. אחר כך אפשר להתעמק בתהליך ניפוי הבאגים ולזהות תג שאילתה או תג בקשה שעלולים לגרום לבעיות.
זיהוי שאילתה או תג בקשה שעלולים לגרום לבעיות
כדי לזהות שאילתה או תג בקשה שעלולים להיות בעייתיים, בודקים את הקטע TopN queries:

כאן אפשר לראות שלשאילתה עם טביעת האצבע 3216067328234137024 יש ניצול גבוה של המעבד (CPU) והיא יכולה להיות בעייתית.
בטבלה TopN queries מוצגת סקירה כללית של השאילתות שמשתמשות בהכי הרבה CPU במהלך חלון הזמן שנבחר, ממוינות מהגבוה לנמוך. מספר השאילתות מסוג TopN מוגבל ל-100.
בתרשימים, אנחנו מאחזרים את הנתונים מטבלת הנתונים הסטטיסטיים של שאילתות TopN, שכוללת שלוש רמות פירוט שונות: דקה אחת, 10 דקות ושעה אחת. הערך של כל נקודה על הגרף בתרשימים מייצג את הערך הממוצע במרווח של דקה אחת.
מומלץ להוסיף תגים לשאילתות ה-SQL. תיוג שאילתות עוזר לכם למצוא בעיות במבנים ברמה גבוהה יותר, כמו לוגיקה עסקית או מיקרו-שירות.

בטבלה מוצגים המאפיינים הבאים:
- טביעת אצבע: גיבוב (hash) של תג הבקשה, או אם התג לא קיים, גיבוב של טקסט השאילתה.
תג שאילתה או בקשה: אם לשאילתה משויך תג, התג שיוצג הוא תג הבקשה. הנתונים הסטטיסטיים של כמה שאילתות עם אותה מחרוזת תג מקובצים בשורה אחת, שבה הערך של
REQUEST_TAGתואם למחרוזת התג. איך פותרים בעיות באמצעות תגי בקשות ותגי טרנזקציותאם לשאילתה אין תג משויך, מוצגת שאילתת ה-SQL, שקוצצת לכ-64KB. ב-DML באצווה, הצהרות ה-SQL משוטחות לשורה אחת ומחוברות באמצעות תו מפריד של נקודה ופסיק. המערכת מסירה כפילויות מטקסטים זהים של SQL ברצף לפני שהיא חותכת אותם.
סוג השאילתה: מציין אם השאילתה היא
PARTITIONED_QUERYאוQUERY.PARTITIONED_QUERYהיא שאילתה עםpartitionTokenשהתקבלה מ-PartitionQuery API. כל השאילתות האחרות והצהרות DML מסומנות בסוג השאילתהQUERY.CPU Utilization: צריכת משאבי המעבד על ידי שאילתה, כאחוז מתוך סך משאבי המעבד שנעשה בהם שימוש על ידי כל השאילתות שמופעלות במסדי הנתונים במרווח הזמן הזה. הערך מוצג בעמודה אופקית בטווח של 0 עד 100.
המלצה: Spanner מנתח את השאילתות כדי לקבוע אם אפשר לשפר אותן באמצעות אינדקסים משופרים. אם כן, הוא ימליץ על אינדקסים חדשים או ששונו שיכולים לשפר את ביצועי השאילתות. מידע נוסף זמין במאמר בנושא שימוש בכלי לייעוץ לגבי אינדקסים ב-Spanner.
CPU (%): צריכת משאבי המעבד על ידי שאילתה, כאחוז מתוך משאבי המעבד הכוללים שמשמשים את כל השאילתות שמופעלות במסדי הנתונים במרווח הזמן הזה.
מספר ההרצות: שיעור ההרצות הממוצע של השאילתות, בהרצות לדקה, שנמדד ב-Spanner במהלך המרווח.
Avg latency (ms): משך הזמן הממוצע, במיקרו-שניות, של כל הרצת שאילתה במסד הנתונים. החישוב הממוצע הזה לא כולל את זמן הקידוד והשידור של קבוצת התוצאות, וגם לא את התקורה.
Avg rows scanned: המספר הממוצע של השורות שנסרקו על ידי השאילתה, לא כולל ערכים שנמחקו.
מספר ממוצע של שורות שהוחזרו: מספר השורות הממוצע שהשאילתה החזירה.
בייטים שהוחזרו: מספר הבייטים של הנתונים שהוחזרו על ידי השאילתה, לא כולל תקורה של קידוד שידור.
שונות אפשרית בין הגרפים
יכול להיות שתבחינו בהבדלים בין התרשים Total CPU Utilization (all queries) לבין התרשים Total CPU Utilization (per Query or Request tag). יש שתי סיבות אפשריות למצב הזה:
מקורות שונים של נתונים: הנתונים של Cloud Monitoring, שמזינים את התרשים Total CPU Utilization (all queries), בדרך כלל מדויקים יותר כי הם נשלחים כל דקה ונשמרים למשך 45 ימים. מצד שני, יכול להיות שהנתונים בטבלת המערכת, שמוצגים בתרשים Total CPU Utilization (per Query or Request tag), מחושבים כממוצע על פני 10 דקות (או שעה). במקרה כזה, יכול להיות שנאבד נתונים ברמת פירוט גבוהה שמוצגים בתרשים Total CPU Utilization (all queries).
חלונות צבירה שונים: בשני התרשימים יש חלונות צבירה שונים. לדוגמה, כשבודקים אירוע שנוצר לפני יותר מ-6 שעות, נשלחת שאילתה לטבלה
SPANNER_SYS.QUERY_STATS_TOTAL_10MINUTE. במקרה כזה, אירוע שמתרחש בשעה 10:01 יצטבר במשך 10 דקות ויופיע בטבלת המערכת שמתאימה לחותמת הזמן 10:10.
בצילום המסך הבא אפשר לראות דוגמה לשונות כזו.

ניתוח שאילתה ספציפית או תג בקשה ספציפי
כדי לבדוק אם תג שאילתה או תג בקשה הוא שורש הבעיה, לוחצים על תג השאילתה או תג הבקשה שנראה שיש לו את העומס הגבוה ביותר או שלוקח יותר זמן מהאחרים. אפשר לבחור כמה שאילתות ותגי בקשה בו-זמנית.
אפשר להעביר את סמן העכבר מעל התרשים של השאילתות בציר הזמן כדי לראות את ניצול המעבד (בשניות).
כדי לצמצם את הבעיה, כדאי לבדוק את הדברים הבאים:
- כמה זמן העומס גבוה? האם המחיר גבוה רק עכשיו? או שהיא גבוהה כבר הרבה זמן? משנים את טווחי התאריכים כדי למצוא את התאריך והשעה שבהם הביצועים של השאילתה התחילו לרדת.
- היו עליות פתאומיות בשימוש במעבד? אפשר לשנות את חלון הזמן כדי לבדוק את היסטוריית השימוש במעבד בשאילתה.
- מהי צריכת המשאבים? איך היא קשורה לשאילתות אחרות? מעיינים בטבלה ומשווים את הנתונים של שאילתות אחרות לשאילתה שנבחרה. האם יש הבדל משמעותי?
כדי לוודא שהשאילתה שנבחרה תורמת לניצול הגבוה של המעבד (CPU), אפשר להציג פירוט של תבנית השאילתה הספציפית (או תג הבקשה) ולנתח אותה לעומק בדף הפרטים של השאילתה.
צפייה בדף פרטי השאילתה
כדי לראות את הפרטים של תבנית שאילתה או תג בקשה ספציפיים בצורה גרפית, לוחצים על טביעת האצבע שמשויכת לשאילתה או לתג הבקשה. ייפתח הדף 'פרטי השאילתה'.

בדף פרטי השאילתה מוצג המידע הבא:
- טקסט של פרטי השאילתה: טקסט של שאילתת SQL, מקוצר לכ-64KB. הנתונים הסטטיסטיים של כמה שאילתות עם אותה מחרוזת תג מקובצים בשורה אחת, שבה הערך של REQUEST_TAG תואם למחרוזת התג הזו. בשדה הזה מוצג רק הטקסט של אחת מהשאילתות האלה. ב-DML של קבוצות, קבוצת הצהרות ה-SQL משוטחת לשורה אחת, ומחוברת באמצעות נקודה ופסיק כמפריד. מערכת Cloud SQL מסירה כפילויות מטקסטים זהים של SQL לפני שהיא חותכת אותם.
- הערכים של השדות הבאים:
- מספר הביצועים: השיעור הממוצע של ביצועי השאילתות, בביצועים לדקה, שנמדד ב-Spanner במהלך המרווח.
- Avg. CPU (ms): צריכת משאבי המעבד הממוצעת, באלפיות השנייה, על ידי שאילתה של משאבי המעבד של המופע במרווח זמן.
- Avg. Latency (ms): משך הזמן הממוצע (באלפיות השנייה) של כל שאילתה שמופעלת במסד הנתונים. החישוב הממוצע הזה לא כולל את זמן הקידוד ואת זמן השידור של קבוצת התוצאות והתקורה.
- מספר ממוצע של שורות שהוחזרו: המספר הממוצע של השורות שהוחזרו על ידי השאילתה.
- מספר השורות הממוצע שנסרקו: המספר הממוצע של השורות שנסרקו בשאילתה, לא כולל ערכים שנמחקו.
- Avg. bytes (מספר הבייטים הממוצע): מספר הבייטים של הנתונים שהוחזרו על ידי השאילתה, לא כולל תקורה של קידוד השידור.
- תרשים של דוגמאות לתוכניות לביצוע שאילתות: כל נקודה בתרשים מייצגת תוכנית לביצוע שאילתה שנדגמה בזמן מסוים, ואת זמן האחזור הספציפי של השאילתה. לוחצים על אחת הנקודות בתרשים כדי לראות את תוכנית לביצוע שאילתה ואת השלבים שבוצעו במהלך ההרצה של השאילתה. הערה: תוכניות לביצוע שאילתות לא נתמכות בשאילתות עם partitionTokens שהתקבלו מ-PartitionQuery API ובשאילתות DML מחולקות למחיצות.
כלי להמחשת תוכנית לביצוע שאילתה: הצגת תוכנית לביצוע שאילתה שנבחרה לדגימה. ב-Spanner יש את אפשרויות הפריסה הבאות:
- תצוגת עץ: בתצוגת העץ, תוכנית לביצוע שאילתה מוצגת כתרשים שבו כל צומת או כרטיס מייצג איטרטור שצורך שורות מהקלט שלו ומפיק שורות עבור ההורה שלו. אפשר ללחוץ על כל איטרטור כדי להרחיב את המידע.
תצוגה עוקבת: בתצוגה העוקבת מוצגת תוכנית לביצוע שאילתה בטבלה היררכית, שבה כל שורה מייצגת אופרטור. אפשר ללחוץ על כל שורה כדי להרחיב את המידע.

הטבלה כוללת את העמודות הבאות:
- שם: השם של האופרטור.
- קבוצת מכונות: קבוצת המכונות שבה הופעל האופרטור.
- זמן האחזור: משך הזמן שחלף במהלך הביצוע של הפעולה הנוכחית. יכול להיות שהערך הזה יהיה גבוה יותר מזמן המעבד (לדוגמה, אם האופרטור המתין לשיחות מרחוק או לעיכוב במערכת הקבצים).
- זמן אחזור מצטבר: משך הזמן שחלף במהלך הביצוע של כל עץ המשנה שהשורש שלו הוא האופרטור הזה. הנתון הזה לא כולל את זמן יצירת התוכנית ועלויות תקורה אחרות, כך שהזמן המצטבר יכול להיות קצר יותר מהמשך הכולל של השאילתה.
- זמן CPU: סכום הזמן הכולל של ה-CPU שנדרש להפעלת השאילתה. לא כולל זמן אחזור ברשת. חלקים מסוימים בהרצת השאילתה עשויים להתבצע במקביל, ולכן יכול להיות שזמן השימוש במעבד יהיה ארוך יותר מזמן ההרצה הכולל. לדוגמה, אם שאילתה מבצעת עשר פעולות במקביל באלפית השנייה (ms), הזמן שחלף הוא אלפית השנייה, אבל זמן ה-CPU הוא 10 אלפיות השנייה.
- השורות שהוחזרו: מספר השורות שהוחזרו על ידי האופרטור.
תרשים זמן האחזור של השאילתה: מציג את ערך זמן האחזור של השאילתה שנבחרה לאורך תקופה מסוימת. מוצג גם זמן האחזור הממוצע.
תרשים של ניצול המעבד: תרשים שמציג את ניצול המעבד לפי שאילתה, באחוזים, לאורך תקופת זמן. הוא גם מציג את ניצול המעבד הממוצע.
תרשים של מספר ההפעלות/ההפעלות שנכשלו: בתרשים הזה מוצג שיעור ההפעלות הממוצע של שאילתות (בהפעלות לדקה) לאורך תקופת זמן מסוימת, ושיעור ההפעלות הממוצע של שאילתות שנכשלו (בהפעלות שנכשלו לדקה).
תרשים השורות שנסרקו: מציג את מספר השורות שהשאילתה סרקה לאורך תקופה מסוימת.
התרשים Rows returned: מציג את מספר השורות שהשאילתה החזירה לאורך תקופה מסוימת.
מסנן טווח תאריכים: מסנן את פרטי השאילתה לפי טווחי תאריכים, כמו שעה, יום או טווח מותאם אישית.
כדי ליצור את הגרפים, אנחנו מאחזרים את הנתונים מטבלת הנתונים הסטטיסטיים של שאילתות TopN, שכוללת שלוש רמות פירוט שונות: דקה אחת, 10 דקות ושעה אחת. הערך של כל נקודה על הגרף בתרשימים מייצג את הערך הממוצע במרווח של דקה אחת.
חיפוש כל ההפעלות של שאילתה ביומן הביקורת
כדי לחפש את כל ההרצות של טביעת אצבע מסוימת של שאילתה ביומני הביקורת של Cloud, שולחים שאילתה ליומן הביקורת ומחפשים את כל הערכים של query_fingerprint שתואמים לשדה Fingerprint בטבלת נתוני השאילתות TopN. מידע נוסף מופיע במאמר סקירה כללית על שאילתות וצפייה ביומנים. אתם יכולים להשתמש בשיטה הזו כדי לזהות את המשתמש שהפעיל את השאילתה.