נתונים סטטיסטיים של פקודות DML עם חלוקה למחיצות

שפת טיפול בנתונים (DML) עם חלוקה למחיצות פעילה מספקת התקדמות בזמן אמת עבור שפות DML עם חלוקה למחיצות שפעילות במסד הנתונים.

‫Spanner מספק טבלה מובנית, SPANNER_SYS.ACTIVE_PARTITIONED_DMLS, שמציגה רשימה של פקודות DML מחולקות למחיצות שפועלות ואת ההתקדמות שלהן.

בדף הזה מתואר הפירוט של הטבלה, מוצגות כמה שאילתות לדוגמה שמשתמשות בטבלה הזו, ולבסוף מוסבר איך להשתמש בשאילתות האלה כדי לצמצם בעיות שנגרמות על ידי פעולות DML פעילות עם חלוקה למחיצות. המידע בדף הזה רלוונטי למסדי נתונים של ניב GoogleSQL ולמסדי נתונים של ניב PostgreSQL.

גישה לנתונים סטטיסטיים פעילים של DML עם חלוקה למחיצות

‫Spanner מספק את הנתונים הסטטיסטיים של DML פעיל עם חלוקה למחיצות בסכימה SPANNER_SYS. אפשר לגשת לנתוני SPANNER_SYS בדרכים הבאות:

השיטות הבאות לקריאה יחידה ש-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

המאמרים הבאים