בדף הזה מוסבר על מדדי אורך החיים (TTL) ב-Spanner. מידע נוסף זמין במאמר מידע על TTL.
מדדים
Spanner מספק מידע על פעילויות של TTL בטבלת מערכת שאפשר לקרוא באמצעות שאילתות SQL, וגם כמדדים שאפשר לגשת אליהם דרך Cloud Monitoring.
בטבלת המערכת מופיע מידע על TTL לכל טבלה במסד נתונים, וב-Cloud Monitoring מופיעים מדדים ברמת מסד הנתונים.
שימוש בשאילתת SQL
Spanner מספק טבלה מובנית שעוקבת אחרי מידע שקשור ל-TTL. שם הטבלה הוא SPANNER_SYS.ROW_DELETION_POLICIES והסכימה שלה היא:
| שם העמודה | סוג | תיאור |
|---|---|---|
| TABLE_NAME | מחרוזת | השם של הטבלה שמכילה את מדיניות ה-TTL הזו. |
| PROCESSED_WATERMARK | TIMESTAMP | המדיניות הזו הופעלה על כל השורות בטבלה עד עכשיו. יכול להיות שמחיצות מסוימות בטבלה עברו עיבוד לאחרונה, ולכן חותמת הזמן הזו מייצגת את המחיצה שעברה עיבוד הכי מזמן. בדרך כלל תוך 72 שעות. |
| UNDELETABLE_ROWS | INT64 | מספר השורות שלא ניתן למחוק באמצעות מדיניות ה-TTL. פרטים נוספים מופיעים במאמר בנושא שורות שלא ניתן למחוק. |
| MIN_UNDELETABLE_TIMESTAMP | TIMESTAMP | חותמת הזמן הכי ישנה של שורות שלא ניתן למחוק שנצפתה במהלך מחזור העיבוד האחרון. |
המידע על המדיניות בנושא מחיקת נתונים מוחזר לכל טבלה במסד הנתונים.
אפשר להריץ שאילתת SQL על הנתונים האלה, כמו בדוגמה הבאה:
SELECT TABLE_NAME, UNDELETABLE_ROWS
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0
אפשר לגשת לטבלאות SPANNER_SYS רק דרך ממשקי SQL. לדוגמה:
- הדף Spanner Studio במסוף Google Cloud
- הפקודה
gcloud spanner databases execute-sql -
executeQueryAPI
שיטות אחרות לקריאה יחידה ש-Spanner מספק לא תומכות ב-SPANNER_SYS.
שימוש ב-Cloud Monitoring
Spanner מספק את המדדים הבאים כדי לעקוב אחר פעילות ה-TTL ברמת מסד הנתונים:
-
row_deletion_policy/deleted_rowsהוא מספר השורות שנמחקו על ידי מדיניות ה-TTL. -
row_deletion_policy/undeletable_rowsהוא מספר השורות שתואמות להצהרת מחיקת השורה (GoogleSQL) אוTTL INTERVAL(PostgreSQL), אבל אי אפשר למחוק אותן. בדרך כלל, הסיבה לכך היא שהיו יותר מדי שורות צאצא בשורה, ולכן הפעולה חרגה ממגבלת העסקאות של Spanner. -
row_deletion_policy/processed_watermark_ageהוא הזמן שחלף בין עכשיו לבין חותמת הזמן של הקריאה ששימשה את המחזור האחרון שהסתיים בהצלחה (עם שורות שלא ניתן למחוק או בלי שורות כאלה).
המדדים האלה זמינים דרך Cloud Monitoring ומסוףGoogle Cloud .
מעקב
אפשר גם לעקוב אחרי פעילויות אחרות של TTL.
איתור הסריקה המוצלחת האחרונה
אפשר למצוא את חותמת הזמן של התמונה האחרונה שבה Spanner סיים סריקה של הטבלה בחיפוש אחר שורות שתוקפן פג. כדי לעשות את זה באמצעות שאילתת SQL:
SELECT PROCESSED_WATERMARK
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE TABLE_NAME = $name
לחלופין, המדד row_deletion_policy/process_watermark_age מציג מידע דומה, אבל הוא מבוטא כהפרש בין הזמן הנוכחי לבין הזמן של הסריקה האחרונה. המדד לא מחולק לפי טבלה, אבל הוא מייצג את זמן הסריקה הכי ישן של כל הטבלאות במסד הנתונים שמופעל בהן TTL.
שורות שתואמות למדיניות TTL נמחקות בדרך כלל תוך 72 שעות מתאריך התפוגה שלהן. אתם יכולים להגדיר התראה ב-processed_watermark_age כדי לקבל הודעה אם משך הזמן חורג מ-72 שעות.
אם processed_watermark_age ישן יותר מ-72 שעות, יכול להיות שמשימות בעדיפות גבוהה יותר מונעות את ההפעלה של TTL. במקרה כזה, מומלץ לבדוק את ניצול המעבד ולהוסיף עוד קיבולת חישוב אם צריך. אם ניצול המעבד נמצא בטווח המומלץ, כדאי לבדוק אם יש שימוש בלתי מאוזן במשאבים (hotspotting) באמצעות Key Visualizer.
מעקב אחרי שורות שנמחקו
כדי לעקוב אחרי פעילות ה-TTL בטבלה, יוצרים תרשים של המדד row_deletion_policy/deleted_rows. במדד הזה מוצג מספר השורות שנמחקו לאורך זמן.
אם לא חלף תוקף של נתונים, המדד הזה יהיה ריק.
מעקב אחרי שורות שלא ניתן למחוק
אם אי אפשר למחוק שורה באמצעות TTL, Spanner מנסה שוב באופן אוטומטי.
אם הפעולה של TTL לא מצליחה לעבור עיבוד אחרי ניסיון חוזר, Spanner מדלג על השורה ומדווח עליה במדד row_deletion_policy/undeletable_rows_count.
אתם יכולים להגדיר התראה ב-row_deletion_policy/undeletable_rows_count כדי לקבל הודעה על ספירה שאינה אפס.
אם מופיע מספר שאינו אפס, אפשר ליצור שאילתה כדי לפרק את המספר לפי טבלה:
SELECT TABLE_NAME, UNDELETABLE_ROWS, MIN_UNDELETABLE_TIMESTAMP
FROM SPANNER_SYS.ROW_DELETION_POLICIES
WHERE UNDELETABLE_ROWS > 0
כדי לחפש את התוכן של השורה שלא ניתן למחוק:
SELECT *
FROM $TABLE_NAME
WHERE $EXPIRE_COL >= $MIN_UNDELETABLE_TIMESTAMP
ברוב המקרים, כשל במחיקת שורה נובע מעדכונים מדורגים בטבלאות ובאינדקסים משולבים, כך שגודל העסקה שמתקבל חורג ממגבלות השינוי של Spanner. כדי לפתור את הבעיה, צריך לעדכן את הסכימה ולהוסיף מדיניות נפרדת של TTL בטבלאות משולבות.