במסמך הזה מתוארים הנתונים הסטטיסטיים של העסקאות ש-Spanner מציע כטבלאות מובנות. אפשר לאחזר נתונים סטטיסטיים מהטבלאות SPANNER_SYS.TXN_STATS* האלה באמצעות הצהרות SQL.
מתי כדאי להשתמש בנתונים סטטיסטיים של עסקאות
הנתונים הסטטיסטיים של העסקאות שימושיים כשבודקים בעיות בביצועים. לדוגמה, אפשר לבדוק אם יש טרנזקציות שפועלות לאט ויכול להיות שהן משפיעות על הביצועים או על השאילתות לשנייה (QPS) במסד הנתונים. תרחיש נוסף הוא כשבאפליקציות הלקוח יש זמן אחזור גבוה של ביצוע טרנזקציות. ניתוח של נתונים סטטיסטיים של טרנזקציות יכול לעזור לכם לגלות צווארי בקבוק פוטנציאליים, כמו נפחים גדולים של עדכונים בעמודה מסוימת, שעשויים להשפיע על זמן האחזור.
איך ניגשים לסטטיסטיקות של עסקאות
Spanner מספק את הנתונים הסטטיסטיים של טרנזקציות בטבלה בסכימה SPANNER_SYS. אפשר לגשת לנתוני SPANNER_SYS
באמצעות הדרכים הבאות:
דף Spanner Studio של מסד נתונים במסוף Google Cloud .
מרכז הבקרה תובנות לגבי עסקאות.
השיטה
executeSqlאו השיטהexecuteStreamingSql.
ה-methods הבאות של קריאה יחידה ש-Spanner מספק לא תומכות ב-SPANNER_SYS:
- ביצוע קריאה חזקה משורה אחת או מכמה שורות בטבלה.
- ביצוע קריאה בעבר משורה אחת או מכמה שורות בטבלה.
- קריאה משורה אחת או מכמה שורות באינדקס משני.
נתונים סטטיסטיים של זמן ההמתנה לתגובה מקובצים לפי עסקה
בטבלאות הבאות אפשר לעקוב אחרי הנתונים הסטטיסטיים של TOPעסקאות שצורכות משאבים במהלך תקופה מסוימת.
SPANNER_SYS.TXN_STATS_TOP_MINUTE: נתונים סטטיסטיים של טרנזקציות שמצטברים במרווחי זמן של דקה.
SPANNER_SYS.TXN_STATS_TOP_10MINUTE: נתונים סטטיסטיים של טרנזקציות שמצטברים במרווחי זמן של 10 דקות.
SPANNER_SYS.TXN_STATS_TOP_HOUR: נתונים סטטיסטיים של טרנזקציות שמצטברים במרווחי זמן של שעה.
הטבלאות האלה כוללות את המאפיינים הבאים:
כל טבלה מכילה נתונים של מרווחי זמן לא חופפים, למשך הזמן שצוין בשם הטבלה.
-
- מרווחי זמן של דקה אחת מסתיימים בדיוק בדקה.
- מרווחים של 10 דקות מסתיימים כל 10 דקות החל מתחילת השעה.
- מרווחים של שעה מסתיימים בשעה עגולה.
לדוגמה, בשעה 11:59:30, המרווחים האחרונים שזמינים לשאילתות SQL הם:
- דקה אחת: 11:58:00–11:58:59
- 10 דקות: 11:40:00–11:49:59
- שעה אחת: 10:00:00–10:59:59 AM
Spanner מקבץ את הנתונים הסטטיסטיים לפי FPRINT (טביעת אצבע) של העסקאות. אם קיים תג עסקה, FPRINT הוא הגיבוב של התג. אחרת, זהו הגיבוב שמחושב על סמך הפעולות שקשורות לעסקה.
מכיוון שהנתונים הסטטיסטיים מקובצים לפי FPRINT, אם אותה עסקה מבוצעת מספר פעמים בפרק זמן כלשהו, בטבלאות האלה תופיע רק רשומה אחת של העסקה הזו.
כל שורה מכילה נתונים סטטיסטיים לגבי כל ההרצות של טרנזקציה מסוימת ש-Spanner אוסף לגביה נתונים סטטיסטיים במהלך המרווח שצוין.
אם Spanner לא מצליח לאחסן נתונים סטטיסטיים של כל הטרנזקציות שמתבצעות במהלך המרווח בטבלאות האלה, המערכת נותנת עדיפות לטרנזקציות עם זמן האחזור הגבוה ביותר, ניסיונות הביצוע ומספר הבייטים שנכתבו במהלך המרווח שצוין.
כל העמודות בטבלאות הן nullable.
סכמת טבלאות
| שם העמודה | סוג | תיאור |
|---|---|---|
INTERVAL_END |
TIMESTAMP |
סוף מרווח הזמן שבו התרחשו הביצועים של העסקאות שנכללות. |
TRANSACTION_TAG |
STRING |
תג העסקה האופציונלי של פעולת העסקה הזו. מידע נוסף על השימוש בתגים זמין במאמר פתרון בעיות באמצעות תגי טרנזקציות. נתונים סטטיסטיים של כמה עסקאות עם אותו מחרוזת תגים מקובצים בשורה אחת עם הערך `TRANSACTION_TAG` שתואם למחרוזת התגים הזו. |
FPRINT |
INT64 |
הגיבוב (hash) של TRANSACTION_TAG אם הוא קיים. אחרת, הגיבוב מחושב על סמך הפעולות שקשורות לעסקה.
השילוב של INTERVAL_END ו-FPRINT משמש כמפתח ייחודי לטבלאות האלה. |
READ_COLUMNS |
ARRAY<STRING> |
קבוצת העמודות שנקראו על ידי הטרנזקציה. |
WRITE_CONSTRUCTIVE_COLUMNS |
ARRAY<STRING> |
קבוצת העמודות שנכתבו באופן קונסטרוקטיבי, כלומר הוקצו להן ערכים חדשים, על ידי העסקה.
בסנכרון שינויים בזרמי נתונים, אם העסקה כללה כתיבה לעמודות ולטבלאות שנמצאות במעקב על ידי סנכרון שינויים בזרמי נתונים, WRITE_CONSTRUCTIVE_COLUMNS
מכיל שתי עמודות – .data ו-._exists
, עם קידומת של שם סנכרון שינויים בזרמי נתונים. _exists הוא שדה שמשמש לבדיקה אם שורה מסוימת קיימת או לא.
|
WRITE_DELETE_TABLES |
ARRAY<STRING> |
קבוצת הטבלאות שהשורות שלהן נמחקו או הוחלפו על ידי הטרנזקציה. |
ATTEMPT_COUNT |
INT64 |
המספר הכולל של הניסיונות לביצוע העסקה, כולל הניסיונות שבוטלו לפני הקריאה ל-commit. |
COMMIT_ATTEMPT_COUNT |
INT64 |
המספר הכולל של ניסיונות לאישור עסקאות. המספר הזה צריך להיות זהה למספר השיחות לשיטת commit של העסקה.
|
COMMIT_ABORT_COUNT |
INT64 |
המספר הכולל של ניסיונות לביצוע עסקאות שבוטלו, כולל ניסיונות שבוטלו לפני הקריאה לשיטת commit של העסקה.
|
COMMIT_RETRY_COUNT |
INT64 |
המספר הכולל של ניסיונות חוזרים מניסיונות שבוטלו קודם. יכול להיות שיהיו כמה ניסיונות לבצע טרנזקציה ב-Spanner לפני שהיא תאושר, בגלל מחלוקות על נעילה או אירועים זמניים. מספר גבוה של ניסיונות חוזרים ביחס למספר הניסיונות לביצוע פעולות מצביע על כך שיכול להיות שיש בעיות שכדאי לבדוק. מידע נוסף זמין בקטע הסבר על עסקאות ומספרים של פעולות Commit שבדף הזה. |
COMMIT_FAILED_PRECONDITION_COUNT |
INT64 |
המספר הכולל של ניסיונות לאישור עסקאות שהחזירו שגיאות של תנאי קדם שנכשלו, כמו UNIQUE הפרות של אינדקסים, שורה שכבר קיימת או שורה שלא נמצאה.
|
SERIALIZABLE_PESSIMISTIC_TXN_COUNT |
INT64 |
המספר הכולל של ניסיונות העסקה שהופעלו עם רמת הבידוד SERIALIZABLE ונעילת PESSIMISTIC. היא תת-קבוצה של
ATTEMPT_COUNT.
|
REPEATABLE_READ_OPTIMISTIC_TXN_COUNT |
INT64 |
המספר הכולל של ניסיונות העסקה שהופעלו עם רמת הבידוד REPEATABLE READ ונעילת OPTIMISTIC. היא תת-קבוצה של
ATTEMPT_COUNT. |
AVG_PARTICIPANTS |
FLOAT64 |
המספר הממוצע של משתתפים בכל ניסיון לביצוע פעולת Commit. מידע נוסף על משתתפים זמין במאמר מחזור החיים של פעולות קריאה וכתיבה ב-Spanner. |
AVG_TOTAL_LATENCY_SECONDS |
FLOAT64 |
מספר השניות הממוצע שחלף מהפעולה הראשונה בעסקה ועד לאישור או לביטול שלה. |
AVG_COMMIT_LATENCY_SECONDS |
FLOAT64 |
מספר השניות הממוצע שנדרש לביצוע פעולת השמירה. |
AVG_BYTES |
FLOAT64 |
מספר הבייטים הממוצע שנכתב על ידי העסקה. |
TOTAL_LATENCY_DISTRIBUTION |
ARRAY<STRUCT>
|
היסטוגרמה של זמן האחזור הכולל של ביצוע פעולת ה-commit, שהוא הזמן שחל מתחילת הפעולה הראשונה של העסקה ועד לביצוע ה-commit או לביטול העסקה, עבור כל הניסיונות של העסקה.
אם עסקה מבוטלת כמה פעמים ואז מתבצעת בהצלחה, זמן האחזור נמדד לכל ניסיון עד לביצוע הסופי. הערכים נמדדים בשניות.
המערך מכיל רכיב יחיד והוא מהסוג הבא:
כדי לחשב את חביון האחוזון מההתפלגות,
משתמשים בפונקציה מידע נוסף זמין במאמר אחוזונים ומדדים של ערכי התפלגות. |
OPERATIONS_BY_TABLE |
ARRAY<STRUCT> |
ההשפעה של פעולות
העמודה הזו עוזרת להמחיש את העומס על הטבלאות ומספקת תובנות לגבי הקצב שבו טרנזקציה כותבת לטבלאות.
מציינים את המערך באופן הבא:
|
TOTAL_LATENCY_DISTRIBUTION_JSON_STRING |
STRING
|
היסטוגרמה של זמן האחזור הכולל של ביצוע פעולת ה-commit, שהוא הזמן שחל מתחילת הפעולה הראשונה של העסקה ועד לביצוע ה-commit או לביטול העסקה, עבור כל הניסיונות של העסקה. ייצוג מחרוזת תואמת JSON של נתון הסטטיסטיקה אם עסקה מבוטלת כמה פעמים ואז מתבצעת בהצלחה, זמן האחזור נמדד לכל ניסיון עד לביצוע הסופי. הערכים נמדדים בשניות. העמודה הזו נתמכת במסדי נתונים של GoogleSQL-dialect ו-PostgreSQL-dialect. בעמודה הזו מופיע הפיזור. כדי לחשב את חביון האחוזון מההתפלגות,
משתמשים בפונקציה מידע נוסף זמין במאמר אחוזונים ומדדים של ערכי התפלגות. |
OPERATIONS_BY_TABLE_JSON_STRING |
STRING |
ההשפעה של פעולות
ייצוג מחרוזת תואמת ל-JSON של העמודה העמודה הזו נתמכת במסדי נתונים של GoogleSQL-dialect ו-PostgreSQL-dialect. העמודה הזו עוזרת להמחיש את העומס על הטבלאות ומספקת תובנות לגבי הקצב שבו טרנזקציה כותבת לטבלאות. |
שאילתות לדוגמה
בקטע הזה מופיעות כמה דוגמאות להצהרות SQL שמאחזרות נתונים סטטיסטיים של עסקאות. אפשר להריץ את הצהרות ה-SQL האלה באמצעות ספריות הלקוח, gcloud spanner או Google Cloud המסוף.
הצגת הנתונים הסטטיסטיים הבסיסיים של כל עסקה בתקופה נתונה
השאילתה הבאה מחזירה את הנתונים הגולמיים של העסקאות המובילות בדקה הקודמת.
SELECT fprint,
read_columns,
write_constructive_columns,
write_delete_tables,
avg_total_latency_seconds,
avg_commit_latency_seconds,
operations_by_table,
avg_bytes
FROM spanner_sys.txn_stats_top_minute
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.txn_stats_top_minute);
פלט השאילתה
| fprint | read_columns | write_constructive_columns | write_delete_tables | avg_total_latency_seconds | avg_commit_latency_seconds | operations_by_table | avg_bytes |
|---|---|---|---|---|---|---|---|
40015598317 |
[] |
["Routes.name", "Cars.model"] |
["Users"] |
0.006578737 |
0.006547737 |
[["Cars",1107,30996],["Routes",560,26880]] |
25286 |
20524969030 |
["id", "no"] |
[] |
[] |
0.001732442 |
0.000247442 |
[] |
0 |
77848338483 |
[] |
[] |
["Cars", "Routes"] |
0.033467418 |
0.000251418 |
[] |
0 |
תכין רשימה של העסקאות עם חביון ההתחייבות הממוצע הכי גבוה
השאילתה הבאה מחזירה את העסקאות עם חביון גבוה של אישור ביצוע בשעה הקודמת, מהחביון הגבוה ביותר לנמוך ביותר.
SELECT fprint,
read_columns,
write_constructive_columns,
write_delete_tables,
avg_total_latency_seconds,
avg_commit_latency_seconds,
avg_bytes
FROM spanner_sys.txn_stats_top_hour
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.txn_stats_top_hour)
ORDER BY avg_commit_latency_seconds DESC;
פלט השאילתה
| fprint | read_columns | write_constructive_columns | write_delete_tables | avg_total_latency_seconds | avg_commit_latency_seconds | avg_bytes |
|---|---|---|---|---|---|---|
40015598317 |
[] |
["Routes.name", "Cars.model"] |
["Users"] |
0.006578737 |
0.006547737 |
25286 |
77848338483 |
[] |
[] |
["Cars", "Routes"] |
0.033467418 |
0.000251418 |
0 |
20524969030 |
["id", "no"] |
[] |
[] |
0.001732442 |
0.000247442 |
0 |
מציאת זמן האחזור הממוצע של עסקאות שקוראות עמודות מסוימות
השאילתה הבאה מחזירה את נתוני השהייה הממוצעת של טרנזקציות שקוראות את העמודה ADDRESS מנתונים סטטיסטיים של שעה אחת:
SELECT fprint,
read_columns,
write_constructive_columns,
write_delete_tables,
avg_total_latency_seconds
FROM spanner_sys.txn_stats_top_hour
WHERE 'ADDRESS' IN UNNEST(read_columns)
ORDER BY avg_total_latency_seconds DESC;
פלט השאילתה
| fprint | read_columns | write_constructive_columns | write_delete_tables | avg_total_latency_seconds |
|---|---|---|---|---|
77848338483 |
["ID", "ADDRESS"] |
[] |
["Cars", "Routes"] |
0.033467418 |
40015598317 |
["ID", "NAME", "ADDRESS"] |
[] |
["Users"] |
0.006578737 |
רשימת עסקאות לפי מספר הבייטים הממוצע ששונה
השאילתה הבאה מחזירה את העסקאות שנדגמו בשעה האחרונה, מסודרות לפי מספר הבייטים הממוצע ששונה בעסקה.
SELECT fprint,
read_columns,
write_constructive_columns,
write_delete_tables,
avg_bytes
FROM spanner_sys.txn_stats_top_hour
ORDER BY avg_bytes DESC;
פלט השאילתה
| fprint | read_columns | write_constructive_columns | write_delete_tables | avg_bytes |
|---|---|---|---|---|
40015598317 |
[] |
[] |
["Users"] |
25286 |
77848338483 |
[] |
[] |
["Cars", "Routes"] |
12005 |
20524969030 |
["ID", "ADDRESS"] |
[] |
["Users"] |
10923 |
נתונים סטטיסטיים מצטברים
SPANNER_SYS מכיל גם טבלאות לאחסון נתונים מצטברים של כל העסקאות שעבורן Spanner תיעד נתונים סטטיסטיים בתקופה מסוימת:
-
SPANNER_SYS.TXN_STATS_TOTAL_MINUTE: נתונים סטטיסטיים מצטברים לכל העסקאות במרווחי זמן של דקה -
SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE: נתונים סטטיסטיים מצטברים לכל העסקאות במרווחי זמן של 10 דקות -
SPANNER_SYS.TXN_STATS_TOTAL_HOUR: סיכום נתונים סטטיסטיים של כל העסקאות במרווחי זמן של שעה
לטבלאות של נתונים סטטיסטיים מצטברים יש את המאפיינים הבאים:
כל טבלה מכילה נתונים של מרווחי זמן לא חופפים באורך שצוין בשם הטבלה.
המרווחים מבוססים על שעות. מרווחי זמן של דקה אחת מסתיימים בתחילת הדקה, מרווחי זמן של 10 דקות מסתיימים כל 10 דקות החל מתחילת השעה, ומרווחי זמן של שעה אחת מסתיימים בתחילת השעה.
לדוגמה, בשעה 11:59:30, המרווחים האחרונים שזמינים לשאילתות SQL על נתונים סטטיסטיים מצטברים של עסקאות הם:
- דקה אחת: 11:58:00–11:58:59
- 10 דקות: 11:40:00–11:49:59
- שעה אחת: 10:00:00–10:59:59 AM
כל שורה מכילה נתונים סטטיסטיים של כל העסקאות שבוצעו במסד הנתונים במהלך המרווח שצוין, כשהם מצטברים יחד. יש רק שורה אחת לכל מרווח זמן.
יכול להיות שהנתונים הסטטיסטיים שמתועדים בטבלאות
SPANNER_SYS.TXN_STATS_TOTAL_*כוללים עסקאות שלא תועדו בטבלאותSPANNER_SYS.TXN_STATS_TOP_*ב-Spanner.חלק מהעמודות בטבלאות האלה מוצגות כמדדים ב-Cloud Monitoring. אלה המדדים שמוצגים:
- מספר הניסיונות לביצוע פעולת Commit
- מספר הניסיונות החוזרים לביצוע Commit
- משתתפים בעסקה
- זמני האחזור של העסקאות
- בייטים שנכתבו
מידע נוסף מופיע במאמר בנושא מדדים של Spanner.
סכמת טבלאות
| שם העמודה | סוג | תיאור |
|---|---|---|
INTERVAL_END |
TIMESTAMP |
סוף מרווח הזמן שבו נאסף הנתון הסטטיסטי הזה. |
ATTEMPT_COUNT |
INT64 |
המספר הכולל של הניסיונות לבצע את העסקאות, כולל הניסיונות שבוטלו לפני הקריאה ל-commit. |
COMMIT_ATTEMPT_COUNT |
INT64 |
המספר הכולל של ניסיונות לאישור עסקאות. המספר הזה צריך להיות זהה למספר השיחות אל שיטת commit של העסקה.
|
COMMIT_ABORT_COUNT |
INT64 |
המספר הכולל של ניסיונות לביצוע עסקאות שבוטלו, כולל ניסיונות שבוטלו לפני הפעלת השיטה commit של העסקה. |
COMMIT_RETRY_COUNT |
INT64 |
מספר ניסיונות השמירה שהם ניסיונות חוזרים מניסיונות שבוטלו בעבר. יכול להיות שהייתה יותר מניסיון אחד לבצע טרנזקציה ב-Spanner לפני שהיא אושרה, בגלל מחלוקות על נעילה או אירועים זמניים. מספר גבוה של ניסיונות חוזרים ביחס למספר הניסיונות לביצוע פעולות מצביע על כך שיכול להיות שיש בעיות שכדאי לבדוק. מידע נוסף זמין בקטע הסבר על עסקאות ומספרים של פעולות Commit שבדף הזה. |
COMMIT_FAILED_PRECONDITION_COUNT |
INT64 |
המספר הכולל של ניסיונות ביצוע (commit) של עסקאות שהחזירו שגיאות של תנאי מוקדם שנכשל, כמו הפרות של אינדקס UNIQUE, שורה שכבר קיימת או שורה שלא נמצאה.
|
SERIALIZABLE_PESSIMISTIC_TXN_COUNT |
INT64 |
המספר הכולל של ניסיונות העסקה שהופעלו עם SERIALIZABLE רמת הבידוד
ו-PESSIMISTIC נעילה. היא תת-קבוצה של ATTEMPT_COUNT. |
REPEATABLE_READ_OPTIMISTIC_TXN_COUNT |
INT64 |
המספר הכולל של ניסיונות העסקה שהופעלו עם REPEATABLE READ רמת הבידוד
ו-OPTIMISTIC נעילה. היא תת-קבוצה של ATTEMPT_COUNT. |
AVG_PARTICIPANTS |
FLOAT64 |
המספר הממוצע של משתתפים בכל ניסיון לביצוע פעולת Commit. מידע נוסף על משתתפים זמין במאמר מחזור החיים של פעולות קריאה וכתיבה ב-Spanner. |
AVG_TOTAL_LATENCY_SECONDS |
FLOAT64 |
מספר השניות הממוצע שחלף מהפעולה הראשונה בעסקה ועד לאישור או לביטול שלה. |
AVG_COMMIT_LATENCY_SECONDS |
FLOAT64 |
מספר השניות הממוצע שנדרש לביצוע פעולת השמירה. |
AVG_BYTES |
FLOAT64 |
מספר הבייטים הממוצע שנכתב על ידי העסקה. |
TOTAL_LATENCY_DISTRIBUTION |
ARRAY<STRUCT>
|
היסטוגרמה של זמן האחזור הכולל של ביצוע השינויים, שהוא הזמן שחל מתחילת הפעולה הראשונה של העסקה ועד לביצוע השינויים או לביטול שלה, בכל הניסיונות לבצע את העסקה.
אם עסקה מבוטלת כמה פעמים ואז מתבצעת בהצלחה, זמן האחזור נמדד לכל ניסיון עד להתחייבות הסופית המוצלחת. הערכים נמדדים בשניות.
המערך מכיל רכיב יחיד והוא מהסוג הבא:
כדי לחשב את חביון האחוזון מההתפלגות,
משתמשים בפונקציה מידע נוסף זמין במאמר אחוזונים ומדדים של ערכי התפלגות. |
OPERATIONS_BY_TABLE |
ARRAY<STRUCT> |
ההשפעה של פעולות
העמודה הזו עוזרת להמחיש את העומס על הטבלאות ומספקת תובנות לגבי קצב הכתיבה של העסקאות לטבלאות.
מציינים את המערך באופן הבא:
|
TOTAL_LATENCY_DISTRIBUTION_JSON_STRING |
STRING
|
היסטוגרמה של זמן האחזור הכולל של ביצוע פעולת ה-commit, שהוא הזמן שחל מתחילת הפעולה הראשונה של העסקה ועד לביצוע ה-commit או לביטול העסקה, עבור כל הניסיונות של העסקה. ייצוג מחרוזת תואמת JSON של נתון הסטטיסטיקה אם עסקה מבוטלת כמה פעמים ואז מתבצעת בהצלחה, זמן האחזור נמדד לכל ניסיון עד לביצוע הסופי. הערכים נמדדים בשניות. העמודה הזו נתמכת במסדי נתונים של GoogleSQL-dialect ו-PostgreSQL-dialect. בעמודה הזו מופיע הפיזור. כדי לחשב את חביון האחוזון מההתפלגות,
משתמשים בפונקציה מידע נוסף זמין במאמר אחוזונים ומדדים של ערכי התפלגות. |
OPERATIONS_BY_TABLE_JSON_STRING |
STRING |
ההשפעה של פעולות
ייצוג מחרוזת תואמת ל-JSON של העמודה העמודה הזו נתמכת במסדי נתונים של GoogleSQL-dialect ו-PostgreSQL-dialect. העמודה הזו עוזרת להמחיש את העומס על הטבלאות ומספקת תובנות לגבי הקצב שבו טרנזקציה כותבת לטבלאות. |
שאילתות לדוגמה
בקטע הזה מופיעות כמה דוגמאות להצהרות SQL שמאחזרות נתונים סטטיסטיים של עסקאות. אפשר להריץ את הצהרות ה-SQL האלה באמצעות ספריות הלקוח, gcloud spanner או Google Cloud המסוף.
איך מוצאים את המספר הכולל של ניסיונות ביצוע השינויים לכל העסקאות
השאילתה הבאה מחזירה את המספר הכולל של ניסיונות ביצוע (commit) לכל העסקאות במרווח הזמן המלא האחרון של דקה אחת:
SELECT interval_end,
commit_attempt_count
FROM spanner_sys.txn_stats_total_minute
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.txn_stats_total_minute)
ORDER BY interval_end;
פלט השאילתה
| interval_end | commit_attempt_count |
|---|---|
2020-01-17 11:46:00-08:00 |
21 |
שימו לב: יש רק שורה אחת בתוצאה כי לסטטיסטיקות המצטברות יש רק רשומה אחת לכל interval_end לכל משך זמן.
חיפוש חביון השמירה הכולל בכל העסקאות
השאילתה הבאה מחזירה את זמן האחזור הכולל של ביצוע פעולות (commit) בכל העסקאות ב-10 הדקות האחרונות:
SELECT (avg_commit_latency_seconds * commit_attempt_count / 60 / 60)
AS total_commit_latency_hours
FROM spanner_sys.txn_stats_total_10minute
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.txn_stats_total_10minute);
פלט השאילתה
| total_commit_latency_hours |
|---|
0.8967 |
שימו לב: יש רק שורה אחת בתוצאה כי לסטטיסטיקות המצטברות יש רק רשומה אחת לכל interval_end לכל משך זמן.
איתור חביון באחוזון ה-99 של עסקאות
השאילתות הבאות מחזירות את האחוזון ה-99 של זמן הביצוע של שאילתות שהופעלו ב-10 הדקות האחרונות.
במסדי נתונים של ניב GoogleSQL, אפשר להשתמש בעמודה TOTAL_LATENCY_DISTRIBUTION:
SELECT interval_end, avg_total_latency_seconds,
SPANNER_SYS.DISTRIBUTION_PERCENTILE(total_latency_distribution[OFFSET(0)], 99.0)
AS percentile_latency
FROM spanner_sys.txn_stats_total_10minute
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.txn_stats_total_10minute)
ORDER BY interval_end;
במסדי נתונים של ניב PostgreSQL, משתמשים בעמודה TOTAL_LATENCY_JSON_DISTRIBUTION_JSON_STRING במקום זאת:
SELECT interval_end, avg_total_latency_seconds,
SPANNER_SYS.DISTRIBUTION_PERCENTILE(total_latency_distribution_json_string, 99.0)
AS percentile_latency
FROM spanner_sys.txn_stats_total_10minute
WHERE interval_end =
(SELECT MAX(interval_end)
FROM spanner_sys.txn_stats_total_10minute)
ORDER BY interval_end;
פלט השאילתה
| interval_end | avg_total_latency_seconds | percentile_latency |
|---|---|---|
2022-08-17 11:46:00-08:00 |
0.34576998305986395 |
9.00296190476190476 |
שימו לב להבדל הגדול בין זמן האחזור הממוצע לבין זמן האחזור באחוזון ה-99. האחוזון ה-99 של זמן האחזור עוזר לזהות עסקאות חריגות אפשריות עם זמן אחזור גבוה.
יש רק שורה אחת בתוצאה כי לנתונים סטטיסטיים מצטברים יש רק רשומה אחת לכל interval_end לכל משך זמן.
שמירת נתונים
לפחות, Spanner שומר נתונים לכל טבלה למשך תקופות הזמן הבאות:
SPANNER_SYS.TXN_STATS_TOP_MINUTEו-SPANNER_SYS.TXN_STATS_TOTAL_MINUTE: מרווחי זמן שכוללים את 6 השעות האחרונות.
SPANNER_SYS.TXN_STATS_TOP_10MINUTEו-SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE: מרווחי זמן שכוללים את 4 הימים הקודמים.
SPANNER_SYS.TXN_STATS_TOP_HOURו-SPANNER_SYS.TXN_STATS_TOTAL_HOUR: מרווחי זמן שכוללים את 30 הימים האחרונים.
נתוני העסקאות ב-Spanner מספקים תובנות לגבי האופן שבו אפליקציה משתמשת במסד הנתונים, והם שימושיים כשבודקים בעיות בביצועים. לדוגמה, אפשר לבדוק אם יש טרנזקציות שפועלות לאט ועלולות לגרום להתנגשות, או לזהות מקורות פוטנציאליים של עומס גבוה, כמו עדכונים בכמויות גדולות בעמודה מסוימת.
הסבר על טרנזקציות ומספרים של פעולות Commit
יכול להיות שיהיה צורך לנסות לבצע טרנזקציה ב-Spanner כמה פעמים לפני שהיא תאושר. המצב הזה קורה בדרך כלל כששתי עסקאות מנסות לפעול על אותם נתונים באותו הזמן, ואחת מהעסקאות צריכה להתבטל כדי לשמור על מאפיין הבידוד של העסקה. אירועים חולפים אחרים שיכולים לגרום לביטול של טרנזקציה כוללים:
בעיות זמניות ברשת.
שינויים בסכימת מסד הנתונים מוחלים בזמן שעסקה נמצאת בתהליך של ביצוע (commit).
למופע Spanner אין את הקיבולת הנדרשת לטיפול בכל הבקשות שהוא מקבל.
במקרים כאלה, הלקוח צריך לנסות שוב את העסקה שבוטלה עד שהיא תאושר בהצלחה או עד שיחול עליה פסק זמן. משתמשים בספריות הלקוח הרשמיות של Spanner יכולים ליהנות ממנגנון אוטומטי לניסיון חוזר שמוטמע בכל ספרייה. אם אתם משתמשים בגרסה מותאמת אישית של קוד הלקוח, עליכם להוסיף את אישורי העסקאות בלולאת ניסיון חוזר.
טרנזקציה ב-Spanner עשויה גם להיות מבוטלת עקב שגיאה שלא ניתן לנסות שוב, כמו פסק זמן לטרנזקציה, בעיות הרשאה או שם לא תקין של טבלה או עמודה. אין צורך לנסות שוב לבצע עסקאות כאלה, וספריית הלקוח של Spanner תחזיר את השגיאה באופן מיידי.
בטבלה הבאה מפורטות כמה דוגמאות לאופן שבו COMMIT_ATTEMPT_COUNT, COMMIT_ABORT_COUNT ו-COMMIT_RETRY_COUNT מתועדים בתרחישים שונים.
| תרחיש | COMMIT_ATTEMPT_COUNT | COMMIT_ABORT_COUNT | COMMIT_RETRY_COUNT |
|---|---|---|---|
| העסקה בוצעה בהצלחה בניסיון הראשון. | 1 | 0 | 0 |
| העסקה בוטלה בגלל שגיאת פסק זמן. | 1 | 1 | 0 |
| העסקה בוטלה בגלל בעיה זמנית ברשת, והושלמה בהצלחה אחרי ניסיון חוזר אחד. | 2 | 1 | 1 |
| בוצעו 5 עסקאות עם אותו FPRINT במרווח של 10 דקות. 3 מהעסקאות בוצעו בהצלחה בניסיון הראשון, בעוד ש-2 עסקאות בוטלו ואז בוצעו בהצלחה בניסיון הראשון לביצוע חוזר. | 7 | 2 | 2 |
הנתונים בטבלאות של נתוני העסקאות הם נתונים מצטברים של פרק זמן מסוים. יכול להיות שבמרווח זמן מסוים, תתרחש ביטול של עסקה וניסיון חוזר לבצע אותה סביב הגבולות, והיא תיכלל בקטגוריות שונות. לכן, יכול להיות שבמרווח זמן מסוים, מספר הביטולים ומספר הניסיונות החוזרים לא יהיו שווים.
הנתונים הסטטיסטיים האלה מיועדים לפתרון בעיות ולבדיקה עצמית, ולא מובטח שהם מדויקים ב-100%. הנתונים הסטטיסטיים נצברים בזיכרון לפני שהם נשמרים בטבלאות Spanner. במהלך שדרוג או פעולות תחזוקה אחרות, שרתי Spanner עשויים להפעיל מחדש את עצמם, מה שישפיע על הדיוק של המספרים.
פתרון בעיות של התנגשויות בבסיס הנתונים באמצעות נתונים סטטיסטיים של טרנזקציות
אתם יכולים להשתמש בקוד SQL או בלוח הבקרה Transaction insights כדי לראות את העסקאות במסד הנתונים שלכם שעשויות לגרום לזמני אחזור ארוכים בגלל מחלוקות על נעילה.
בנושאים הבאים מוסבר איך אפשר לבדוק עסקאות כאלה באמצעות קוד SQL.
בחירת תקופת זמן לבדיקה
אפשר למצוא את המזהה הזה באפליקציה שמשתמשת ב-Spanner.
לצורך התרגיל הזה, נניח שהבעיה התחילה בערך בשעה 17:20 ב-17 במאי 2020.
אתם יכולים להשתמש בתגי טרנזקציות כדי לזהות את מקור הטרנזקציה ולבצע קורלציה בין טבלת נתוני הטרנזקציות לבין טבלת נתוני הנעילות, כדי לפתור ביעילות בעיות שקשורות למאבקים על נעילות. מידע נוסף זמין במאמר פתרון בעיות באמצעות תגי עסקאות.
איסוף נתונים סטטיסטיים של עסקאות לתקופת הזמן שנבחרה
כדי להתחיל בחקירה, מריצים שאילתה בטבלה TXN_STATS_TOTAL_10MINUTE סביב תחילת הבעיה. בתוצאות של השאילתה הזו אפשר לראות איך חלו שינויים בחביון ובנתונים סטטיסטיים אחרים של העסקאות במהלך פרק הזמן הזה.
לדוגמה, השאילתה הבאה מחזירה את נתוני העסקאות המצטברים מהתאריך 4:30 pm עד התאריך 7:40 pm (כולל).
SELECT
interval_end,
ROUND(avg_total_latency_seconds,4) as avg_total_latency_seconds,
commit_attempt_count,
commit_abort_count
FROM SPANNER_SYS.TXN_STATS_TOTAL_10MINUTE
WHERE
interval_end >= "2020-05-17T16:40:00"
AND interval_end <= "2020-05-17T19:40:00"
ORDER BY interval_end;
בטבלה הבאה מפורטות דוגמאות לנתונים שמוחזרים מהשאילתה.
| interval_end | avg_total_latency_seconds | commit_attempt_count | commit_abort_count |
|---|---|---|---|
| 2020-05-17 16:40:00-07:00 | 0.0284 | 315691 | 5170 |
| 2020-05-17 16:50:00-07:00 | 0.0250 | 302124 | 3828 |
| 2020-05-17 17:00:00-07:00 | 0.0460 | 346087 | 11382 |
| 2020-05-17 17:10:00-07:00 | 0.0864 | 379964 | 33826 |
| 2020-05-17 17:20:00-07:00 | 0.1291 | 390343 | 52549 |
| 2020-05-17 17:30:00-07:00 | 0.1314 | 456455 | 76392 |
| 2020-05-17 17:40:00-07:00 | 0.1598 | 507774 | 121458 |
| 2020-05-17 17:50:00-07:00 | 0.1641 | 516587 | 115875 |
| 2020-05-17 18:00:00-07:00 | 0.1578 | 552711 | 122626 |
| 2020-05-17 18:10:00-07:00 | 0.1750 | 569460 | 154205 |
| 2020-05-17 18:20:00-07:00 | 0.1727 | 613571 | 160772 |
| 2020-05-17 18:30:00-07:00 | 0.1588 | 601994 | 143044 |
| 2020-05-17 18:40:00-07:00 | 0.2025 | 604211 | 1700019 |
| 2020-05-17 18:50:00-07:00 | 0.1615 | 601622 | 135601 |
| 2020-05-17 19:00:00-07:00 | 0.1653 | 596804 | 129511 |
| 2020-05-17 19:10:00-07:00 | 0.1414 | 560023 | 112247 |
| 2020-05-17 19:20:00-07:00 | 0.1367 | 570864 | 100596 |
| 2020-05-17 19:30:00-07:00 | 0.0894 | 539729 | 65316 |
| 2020-05-17 19:40:00-07:00 | 0.0820 | 479151 | 40398 |
החביון המצטבר ומספר הביטולים גבוהים יותר בתקופות שמסומנות. בוחרים מרווח של 10 דקות שבו זמן האחזור המצטבר ומספר הביטולים או שניהם גבוהים. מרווח הזמן שמסתיים ב-2020-05-17T18:40:00 משמש בשלב הבא כדי לזהות אילו טרנזקציות תורמות לזמן טעינה ארוך ולמספר גבוה של ביטולים.
זיהוי עסקאות עם זמן אחזור גבוה
מריצים שאילתה על הטבלה TXN_STATS_TOP_10MINUTE כדי לקבל את הנתונים של המרווח שנבחר בשלב הקודם. בעזרת הנתונים האלה, תוכלו לזהות אילו טרנזקציות סובלות מחביון גבוה או ממספר גבוה של ביטולים, או משניהם.
מריצים את השאילתה הבאה כדי לקבל את העסקאות שהכי משפיעות על הביצועים בסדר יורד של זמן האחזור הכולל עבור המרווח לדוגמה שמסתיים ב-2020-05-17T18:40:00.
SELECT
interval_end,
fprint,
ROUND(avg_total_latency_seconds,4) as avg_total_latency_seconds,
ROUND(avg_commit_latency_seconds,4) as avg_commit_latency_seconds,
commit_attempt_count,
commit_abort_count,
commit_retry_count
FROM SPANNER_SYS.TXN_STATS_TOP_10MINUTE
WHERE
interval_end = "2020-05-17T18:40:00"
ORDER BY avg_total_latency_seconds DESC;
| interval_end | fprint | avg_total_latency_seconds | avg_commit_latency_seconds | commit_attempt_count | commit_abort_count | commit_retry_count |
|---|---|---|---|---|---|---|
| 2020-05-17 18:40:00-07:00 | 15185072816865185658 | 0.3508 | 0.0139 | 278802 | 142205 | 129884 |
| 2020-05-17 18:40:00-07:00 | 15435530087434255496 | 0.1633 | 0.0142 | 129012 | 27177 | 24559 |
| 2020-05-17 18:40:00-07:00 | 14175643543447671202 | 0.1423 | 0.0133 | 5357 | 636 | 433 |
| 2020-05-17 18:40:00-07:00 | 898069986622520747 | 0.0198 | 0.0158 | 6 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 10510121182038036893 | 0.0168 | 0.0125 | 7 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 9287748709638024175 | 0.0159 | 0.0118 | 4269 | 1 | 0 |
| 2020-05-17 18:40:00-07:00 | 7129109266372596045 | 0.0142 | 0.0102 | 182227 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 15630228555662391800 | 0.0120 | 0.0107 | 58 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 7907238229716746451 | 0.0108 | 0.0097 | 65 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 10158167220149989178 | 0.0095 | 0.0047 | 3454 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 9353100217060788102 | 0.0093 | 0.0045 | 725 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 9521689070912159706 | 0.0093 | 0.0045 | 164 | 0 | 0 |
| 2020-05-17 18:40:00-07:00 | 11079878968512225881 | 0.0064 | 0.0019 | 65 | 0 | 0 |
השורה הראשונה (מודגשת) בטבלה הקודמת מציגה טרנזקציה עם זמן אחזור ארוך בגלל מספר גבוה של ביטולי אישור. יש גם מספר גבוה של ניסיונות חוזרים לביצוע פעולות, מה שמצביע על כך שהניסיונות שבוטלו בוצעו מחדש. בשלב הבא נבדוק לעומק מה גורם לבעיה הזו.
זיהוי העמודות שמשתתפות בעסקה עם זמן אחזור גבוה
בשלב הזה, כדי לבדוק אם עסקאות עם זמן טעינה גבוה פועלות על אותו סט של עמודות, מאחזרים את הנתונים של read_columns, write_constructive_columns ו-write_delete_tables עבור עסקאות עם מספר גבוה של ביטולים. הערך FPRINT
יהיה שימושי גם בשלב הבא.
SELECT
fprint,
read_columns,
write_constructive_columns,
write_delete_tables
FROM SPANNER_SYS.TXN_STATS_TOP_10MINUTE
WHERE
interval_end = "2020-05-17T18:40:00"
ORDER BY avg_total_latency_seconds DESC LIMIT 3;
| fprint | read_columns | write_constructive_columns | write_delete_tables |
|---|---|---|---|
| 15185072816865185658 | [TestHigherLatency._exists,TestHigherLatency.lang_status,TestHigherLatency.score,globalTagAffinity.shares] |
[TestHigherLatency._exists,TestHigherLatency.shares,TestHigherLatency_lang_status_score_index.shares] |
[] |
| 15435530087434255496 | [TestHigherLatency._exists,TestHigherLatency.lang_status,TestHigherLatency.likes,globalTagAffinity.score] |
[TestHigherLatency._exists,TestHigherLatency.likes,TestHigherLatency_lang_status_score_index.likes] |
[] |
| 14175643543447671202 | [TestHigherLatency._exists,TestHigherLatency.lang_status,TestHigherLatency.score,globalTagAffinity.ugcCount] |
[TestHigherLatency._exists,TestHigherLatency.ugcCount,TestHigherLatency_lang_status_score_index.ugcCount] |
[] |
כפי שאפשר לראות בטבלת הפלט שלמעלה, העסקאות עם זמן האחזור הממוצע הכולל הכי גבוה קוראות את אותן עמודות. יש גם
תחרות על גישה לכתיבה, כי הטרנזקציות כותבות לאותה עמודה, כלומר,
TestHigherLatency._exists.
קובעים איך ביצועי העסקאות השתנו לאורך זמן
אפשר לראות איך הנתונים הסטטיסטיים שמשויכים לצורת העסקה הזו השתנו לאורך תקופה מסוימת. משתמשים בשאילתה הבאה, כאשר $FPRINT הוא טביעת האצבע של העסקה עם זמן האחזור הגבוה מהשלב הקודם.
SELECT
interval_end,
ROUND(avg_total_latency_seconds, 3) AS latency,
ROUND(avg_commit_latency_seconds, 3) AS commit_latency,
commit_attempt_count,
commit_abort_count,
commit_retry_count,
commit_failed_precondition_count,
avg_bytes
FROM SPANNER_SYS.TXN_STATS_TOP_10MINUTE
WHERE
interval_end >= "2020-05-17T16:40:00"
AND interval_end <= "2020-05-17T19:40:00"
AND fprint = $FPRINT
ORDER BY interval_end;
| interval_end | זמן אחזור | commit_latency | commit_attempt_count | commit_abort_count | commit_retry_count | commit_failed_precondition_count | avg_bytes |
|---|---|---|---|---|---|---|---|
| 2020-05-17 16:40:00-07:00 | 0.095 | 0.010 | 53230 | 4752 | 4330 | 0 | 91 |
| 2020-05-17 16:50:00-07:00 | 0.069 | 0.009 | 61264 | 3589 | 3364 | 0 | 91 |
| 2020-05-17 17:00:00-07:00 | 0.150 | 0.010 | 75868 | 10557 | 9322 | 0 | 91 |
| 2020-05-17 17:10:00-07:00 | 0.248 | 0.013 | 103151 | 30220 | 28483 | 0 | 91 |
| 2020-05-17 17:20:00-07:00 | 0.310 | 0.012 | 130078 | 45655 | 41966 | 0 | 91 |
| 2020-05-17 17:30:00-07:00 | 0.294 | 0.012 | 160064 | 64930 | 59933 | 0 | 91 |
| 2020-05-17 17:40:00-07:00 | 0.315 | 0.013 | 209614 | 104949 | 96770 | 0 | 91 |
| 2020-05-17 17:50:00-07:00 | 0.322 | 0.012 | 215682 | 100408 | 95867 | 0 | 90 |
| 2020-05-17 18:00:00-07:00 | 0.310 | 0.012 | 230932 | 106728 | 99462 | 0 | 91 |
| 2020-05-17 18:10:00-07:00 | 0.309 | 0.012 | 259645 | 131049 | 125889 | 0 | 91 |
| 2020-05-17 18:20:00-07:00 | 0.315 | 0.013 | 272171 | 137910 | 129411 | 0 | 90 |
| 2020-05-17 18:30:00-07:00 | 0.292 | 0.013 | 258944 | 121475 | 115844 | 0 | 91 |
| 2020-05-17 18:40:00-07:00 | 0.350 | 0.013 | 278802 | 142205 | 134229 | 0 | 91 |
| 2020-05-17 18:50:00-07:00 | 0.302 | 0.013 | 256259 | 115626 | 109756 | 0 | 91 |
| 2020-05-17 19:00:00-07:00 | 0.315 | 0.014 | 250560 | 110662 | 100322 | 0 | 91 |
| 2020-05-17 19:10:00-07:00 | 0.271 | 0.014 | 238384 | 99025 | 90187 | 0 | 91 |
| 2020-05-17 19:20:00-07:00 | 0.273 | 0.014 | 219687 | 84019 | 79874 | 0 | 91 |
| 2020-05-17 19:30:00-07:00 | 0.198 | 0.013 | 195357 | 59370 | 55909 | 0 | 91 |
| 2020-05-17 19:40:00-07:00 | 0.181 | 0.013 | 167514 | 35705 | 32885 | 0 | 91 |
בפלט הזה אפשר לראות שזמן האחזור הכולל גבוה בתקופה המודגשת. בנוסף, בכל מקום שבו זמן האחזור הכולל גבוה, גם commit_attempt_count
commit_abort_count ו-commit_retry_count גבוהים, למרות שזמן האחזור של ה-commit (commit_latency) לא השתנה באופן משמעותי. מאחר שהתחייבויות לעסקאות מבוטלות בתדירות גבוהה יותר, גם מספר הניסיונות להתחייבות גבוה בגלל ניסיונות חוזרים להתחייבות.
סיכום
בדוגמה הזו, מספר הביטולים הגבוה של פעולות commit היה הגורם לזמן האחזור הגבוה. השלב הבא הוא לבדוק את הודעות השגיאה של ביטול השמירה שהתקבלו על ידי האפליקציה כדי לדעת את הסיבה לביטולים. בדיקת היומנים באפליקציה תראה שהאפליקציה שינתה את עומס העבודה שלה במהלך הזמן הזה, כלומר, צורה אחרת של טרנזקציה הופיעה עם attempts_per_second גבוה, ושהטרנזקציה השונה (אולי משימת ניקוי לילית) הייתה אחראית לקונפליקטים הנוספים של הנעילה.
זיהוי עסקאות שלא בוצע ניסיון חוזר שלהן בצורה תקינה
השאילתה הבאה מחזירה את העסקאות שנדגמו בעשר הדקות האחרונות, שבהן יש מספר גבוה של ביטולי התחייבות אבל אין ניסיונות חוזרים.
SELECT
*
FROM (
SELECT
fprint,
SUM(commit_attempt_count) AS total_commit_attempt_count,
SUM(commit_abort_count) AS total_commit_abort_count,
SUM(commit_retry_count) AS total_commit_retry_count
FROM
SPANNER_SYS.TXN_STATS_TOP_10MINUTE
GROUP BY
fprint )
WHERE
total_commit_retry_count = 0
AND total_commit_abort_count > 0
ORDER BY
total_commit_abort_count DESC;
| fprint | total_commit_attempt_count | total_commit_abort_count | total_commit_retry_count |
|---|---|---|---|
| 1557557373282541312 | 3367894 | 44232 | 0 |
| 5776062322886969344 | 13566 | 14 | 0 |
העסקה עם fprint 1557557373282541312 בוטלה 44232 פעמים, אבל לא נעשה ניסיון חוזר. הנתון הזה נראה חשוד כי מספר הביטולים גבוה, ולא סביר שכל ביטול נגרם בגלל שגיאה שלא ניתן לנסות שוב לתקן. לעומת זאת, העסקה עם fprint 5776062322886969344 נחשבת פחות חשודה כי מספר הביטולים הכולל לא גבוה במיוחד.
השאילתה הבאה מחזירה פרטים נוספים על העסקה עם fprint 1557557373282541312,כולל read_columns, write_constructive_columns ו-write_delete_tables. המידע הזה עוזר לזהות את העסקה בקוד הלקוח, שבו אפשר לבדוק את לוגיקת הניסיון החוזר בתרחיש הזה.
SELECT
interval_end,
fprint,
read_columns,
write_constructive_columns,
write_delete_tables,
commit_attempt_count,
commit_abort_count,
commit_retry_count
FROM
SPANNER_SYS.TXN_STATS_TOP_10MINUTE
WHERE
fprint = 1557557373282541312
ORDER BY
interval_end DESC;
| interval_end | fprint | read_columns | write_constructive_columns | write_delete_tables | commit_attempt_count | commit_abort_count | commit_retry_count |
|---|---|---|---|---|---|---|---|
| 2021-01-27T18:30:00Z | 1557557373282541312 | ['Singers._exists'] | ['Singers.FirstName', 'Singers.LastName', 'Singers._exists'] | [] | 805228 | 1839 | 0 |
| 2021-01-27T18:20:00Z | 1557557373282541312 | ['Singers._exists'] | ['Singers.FirstName', 'Singers.LastName', 'Singers._exists'] | [] | 1034429 | 38779 | 0 |
| 2021-01-27T18:10:00Z | 1557557373282541312 | ['Singers._exists'] | ['Singers.FirstName', 'Singers.LastName', 'Singers._exists'] | [] | 833677 | 2266 | 0 |
| 2021-01-27T18:00:00Z | 1557557373282541312 | ['Singers._exists'] | ['Singers.FirstName', 'Singers.LastName', 'Singers._exists'] | [] | 694560 | 1348 | 0 |
העסקה כוללת קריאה של העמודה המוסתרת Singers._exists כדי לבדוק אם קיימת שורה. העסקה נרשמת גם בעמודות Singers.FirstName ו-Singer.LastName. המידע הזה יכול לעזור לכם לקבוע אם מנגנון הניסיון החוזר של העסקאות שהוטמע בספריית הלקוח המותאמת אישית שלכם פועל כמצופה.
המאמרים הבאים
- מידע נוסף על כלים אחרים לבדיקת תכונות
- מידע נוסף על נתונים אחרים שמאוחסנים ב-Spanner לכל מסד נתונים זמין בטבלאות של סכימת המידע של מסד הנתונים.
- מידע נוסף על שיטות מומלצות ל-SQL ב-Spanner
- מידע נוסף על בדיקת שימוש גבוה במעבד