שפת טיפול בנתונים (DML) עם חלוקה למחיצות פעילה מספקת התקדמות בזמן אמת עבור שפות DML עם חלוקה למחיצות שפעילות במסד הנתונים.
Spanner מספק טבלה מובנית, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, שמציגה רשימה של פקודות DML מחולקות למחיצות שפועלות ואת ההתקדמות שלהן.
בדף הזה מתואר הפירוט של הטבלה, מוצגות כמה שאילתות לדוגמה שמשתמשות בטבלה הזו, ולבסוף מוסבר איך להשתמש בשאילתות האלה כדי לצמצם בעיות שנגרמות על ידי פעולות DML פעילות עם חלוקה למחיצות. המידע בדף הזה רלוונטי למסדי נתונים של ניב GoogleSQL ולמסדי נתונים של ניב PostgreSQL.
גישה לנתונים סטטיסטיים פעילים של DML עם חלוקה למחיצות
Spanner מספק את הנתונים הסטטיסטיים של DML פעיל עם חלוקה למחיצות בסכימה SPANNER_SYS. אפשר לגשת לנתוני SPANNER_SYS בדרכים הבאות:
דף Spanner Studio של מסד נתונים במסוף Google Cloud .
השיטה
executeSqlאו השיטהexecuteStreamingSql.
השיטות הבאות לקריאה יחידה ש-Spanner מספק לא תומכות ב-SPANNER_SYS:
- ביצוע קריאה חזקה משורה אחת או מכמה שורות בטבלה.
- ביצוע קריאה בעבר משורה אחת או מכמה שורות בטבלה.
- קריאה משורה אחת או מכמה שורות באינדקס משני.
ACTIVE_PARTITIONED_DMLS
SPANNER_SYS.ACTIVE_PARTITIONED_DMLS מחזירה רשימה של פקודות DML פעילות עם חלוקה למחיצות, ממוינות לפי זמן ההתחלה.
סכמת טבלאות
בהמשך מוצגת סכימת הטבלה של SPANNER_SYS.ACTIVE_PARTITIONED_DMLS.
| שם העמודה | סוג | תיאור |
|---|---|---|
TEXT |
STRING |
הטקסט של פקודת השאילתה של DML מחולקת למחיצות. |
TEXT_FINGERPRINT |
INT64 |
טביעת האצבע היא גיבוב של טקסט ה-DML שחולק למחיצות. |
SESSION_ID |
STRING |
המזהה של הסשן שבו מתבצעת חלוקת ה-DML. מחיקת מזהה הסשן תגרום לביטול השאילתה. |
NUM_PARTITIONS_TOTAL |
INT64 |
המספר הכולל של המחיצות בפקודת ה-DML המחולקת. |
NUM_PARTITIONS_COMPLETE |
INT64 |
מספר המחיצות שהושלמו על ידי ה-DML עם חלוקה למחיצות. |
NUM_TRIVIAL_PARTITIONS_COMPLETE |
INT64 |
מספר המחיצות המלאות שבהן לא עובדו שורות. |
PROGRESS |
DOUBLE |
ההתקדמות של DML עם חלוקה למחיצות מחושבת כמספר המחיצות הלא טריוויאליות שהושלמו חלקי המספר הכולל של המחיצות הלא טריוויאליות. |
ROWS_PROCESSED |
INT64 |
מספר השורות שעברו עיבוד עד עכשיו, מתעדכן אחרי שכל מחיצה מסיימת את העיבוד. |
START_TIMESTAMP. |
TIMESTAMP |
גבול עליון לשעת ההתחלה של DML עם חלוקה למחיצות. |
LAST_UPDATE_TIMESTAMP |
TIMESTAMP |
חותמת הזמן האחרונה שבה חל שיפור ב-DML עם חלוקה למחיצות. מתעדכן אחרי שחלוקה מסתיימת. |
שאילתות לדוגמה
אפשר להריץ את ההוראות הבאות של SQL באמצעות ספריות הלקוח, Google Cloud CLI או מסוףGoogle Cloud .
הצגת השאילתות הכי ישנות שפועלות
השאילתה הבאה מחזירה רשימה של פקודות DML מחולקות שפועלות, ממוינות לפי זמן ההתחלה של השאילתה.
SELECT text,
session_id,
num_partitions_total,
num_partitions_complete,
num_trivial_partitions_complete,
progress,
rows_processed,
start_timestamp,
last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC;
| טקסט | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | התקדמות | rows_processed | start_timestamp | last_update_timestamp |
|---|---|---|---|---|---|---|---|---|
| UPDATE Concerts SET VenueId = 'amazing venue' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50.00% | 2398654 | 2024-01-21 15:56:30.498744-08:00 | 2024-01-22 15:56:39.049799-08:00 |
| UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00.00% | 0 | 2024-01-22 15:55:18.498744-08:00 | 2024-01-22 15:56:28.049799-08:00 |
| DELETE from Singers WHERE SingerId > 1000000 | 0071a85e-7e5c-576b-8a17-f9bc3d157eea | 8 | 4 | 3 | 20.00% | 238654 | 2024-01-22 15:56:30.498744-08:00 | 2024-01-22 15:56:19.049799-08:00 |
| UPDATE Singers SET MarketingBudget = 1000 WHERE true | 036097a9-91d4-566a-a399-20c754eabdc2 | 8 | 5 | 0 | 62.50% | 238654 | 2024-01-22 15:57:47.498744-08:00 | 2024-01-22 15:57:39.049799-08:00 |
מגבלות
יש כמה מגבלות על השימוש בטבלה SPANNER_SYS.ACTIVE_PARTITIONED_DMLS:
התוצאות של
PROGRESS, ROWS_PROCESSEDו-LAST_UPDATE_TIMESTAMPגדלות בגבולות של מחיצות שהושלמו, כך ש-DML עם מחיצות עשוי להמשיך לעדכן שורות בזמן שהערכים בשלושת השדות האלה נשארים זהים.אם יש מיליוני מחיצות ב-DML עם מחיצות, יכול להיות שהערך בעמודה
PROGRESSלא ישקף את כל ההתקדמות המצטברת. אפשר להשתמש ב-NUM_PARTITIONS_COMPLETEוב-NUM_TRIVIAL_PARTITIONS_COMPLETEכדי לראות את ההתקדמות ברמת פירוט גבוהה יותר.אם מבטלים DML מחולק באמצעות בקשת RPC, יכול להיות שה-DML המחולק שבוטל עדיין יופיע בטבלה. אם מבטלים DML עם חלוקה למחיצות באמצעות מחיקת סשן, הוא מוסר מהטבלה באופן מיידי. מידע נוסף מופיע במאמר מחיקת מזהה הסשן.
שימוש בנתונים של שאילתות DML עם חלוקה למחיצות כדי לפתור בעיות שקשורות לניצול גבוה של CPU
נתונים סטטיסטיים של שאילתות ונתונים סטטיסטיים של טרנזקציות מספקים מידע שימושי כשמנסים לפתור בעיות של זמן אחזור במסד נתונים של Spanner. הכלים האלה מספקים מידע על השאילתות שכבר הושלמו. עם זאת, לפעמים צריך לדעת מה פועל במערכת. לדוגמה, נניח ששיעור ניצול המעבד גבוה ואתם רוצים לענות על השאלות הבאות.
- כמה פקודות DML עם חלוקה למחיצות פועלות כרגע?
- מהן פקודות DML עם חלוקה למחיצות?
- כמה מפעולות ה-DML המחולקות האלה פועלות במשך זמן רב?
- באיזה סשן מורצת השאילתה?
אם יש לך תשובות לשאלות שלמעלה, אפשר לבצע את הפעולה הבאה.
- כדי לפתור את הבעיה באופן מיידי, מוחקים את הסשן שבו מופעלת השאילתה.
- הפחתת התדירות של DML עם חלוקה למחיצות.
במדריך הבא נבדוק פקודות DML פעילות עם חלוקה למחיצות ונקבע איזו פעולה צריך לבצע, אם בכלל.
אחזור סיכום של פקודות DML עם חלוקה למחיצות פעילות
בתרחיש לדוגמה, אנחנו מבחינים בשימוש גבוה מהרגיל במעבד, ולכן אנחנו מחליטים להריץ את השאילתה הבאה כדי לקבל את מספר ה-DMLs הפעילים עם חלוקה למחיצות.
SELECT count(*) as active_count
FROM spanner_sys.active_partitioned_dmls;
השאילתה מניבה את התוצאה הבאה.
| active_count |
|---|
22 |
הצגת 2 פקודות ה-DML המחיצות העתיקות ביותר שפועלות
לאחר מכן אפשר להריץ שאילתה כדי למצוא מידע נוסף על 2 הפקודות הכי ישנות של DML עם חלוקה למחיצות, ממוינות לפי זמן ההתחלה של ה-DML עם חלוקה למחיצות.
SELECT text,
session_id,
num_partitions_total,
num_partitions_complete,
num_trivial_partitions_complete,
progress,
rows_processed,
start_timestamp,
last_update_timestamp
FROM spanner_sys.active_partitioned_dmls
ORDER BY start_timestamp ASC LIMIT 2;
| טקסט | session_id | num_partitions_total | num_partitions_complete | num_trivial_partitions_complete | התקדמות | rows_processed | start_timestamp | last_update_timestamp |
|---|---|---|---|---|---|---|---|---|
| UPDATE Concerts SET VenueId = 'amazing venue' WHERE SingerId < 900000 | 5bd37a99-200c-5d2e-9021-15d0dbbd97e6 | 27 | 15 | 3 | 50.00% | 2398654 | 2024-01-21 15:56:30.498744-08:00 | 2024-01-22 15:56:39.049799-08:00 |
| UPDATE Singers SET LastName = NULL WHERE LastName = '' | 0028284f-0190-52f9-b396-aa588e034806 | 8 | 4 | 4 | 00.00% | 0 | 2024-01-22 15:55:18.498744-08:00 | 2024-01-22 15:56:28.049799-08:00 |
ביטול שאילתה יקרה
מצאנו DML עם חלוקה למחיצות שפועל כבר כמה ימים ולא מתקדם. לכן, אפשר להריץ את הפקודה gcloud spanner databases sessions
delete הבאה כדי למחוק את הסשן באמצעות מזהה הסשן, וכך לבטל את ה-DML המחולק.
gcloud spanner databases sessions delete\
5bd37a99-200c-5d2e-9021-15d0dbbd97e6 \
--database=singer_db --instance=test-instanceהמאמרים הבאים
- מידע נוסף על כלים אחרים לבדיקת תכונות
- מידע נוסף על נתונים אחרים שמאוחסנים ב-Spanner לכל מסד נתונים מופיע בטבלאות של סכימת המידע של מסד הנתונים.
- מידע נוסף על שיטות מומלצות ל-SQL ב-Spanner