שמירה על עדכניות הנתונים במאגר העמודות בזיכרון

בדף הזה נסביר איך לשמור על עדכניות הנתונים במאגר העמודות של מנוע מבוסס-עמודות ב-AlloyDB ל-PostgreSQL.

כשמוסיפים, מוחקים או מעדכנים שורות בטבלה, מנוע מבוסס-עמודות לא מעדכן את הנתונים במאגר העמודות באופן מיידי. במקום זאת, המערכת מסמנת את התוכן המושפע בחנות העמודות כלא תקין, והשאילתות מתוכננות ומופעלות באמצעות נתונים מבוססי-עמודות מחנות העמודות ונתונים מבוססי-שורות ממטמון השורות ומאחסון מסד הנתונים.

עם הזמן, ככל שיותר ויותר בלוקים של נתונים הופכים ללא תקפים, שיפורי הביצועים של השאילתות שמתקבלים מהמנוע מבוסס-העמודות מצטמצמים עד לנקודה שבה צריך לרענן את הנתונים מבוססי-העמודות כדי לשפר שוב את הביצועים של השאילתות. כשמגיעים לסף הרענון הזה, מנוע מבוסס-עמודות משתמש בעבודת רקע כדי לרענן את הנתונים הלא תקינים במאגר העמודות. כברירת מחדל, מנוע מבוסס-העמודות משתמש בסף רענון של 50, שמציין שתוכן נתון במאגר העמודות מסומן לרענון כש-50% מהתוכן שלו הופך ללא תקף. אפשר לשנות את סף הרענון הזה כדי להתאים את התקורה של הרענון האוטומטי, ואולי לשפר את הביצועים של השאילתות המתמשכות בעומס העבודה של האפליקציה.

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

בדיקת אחוז הנתונים הלא תקינים

כשהאפליקציה מוסיפה, מוחקת או מעדכנת שורות בטבלה, מנוע מבוסס-עמודות מסמן את הנתונים המושפעים במאגר העמודות כלא תקינים. כדי לבדוק את אחוז הנתונים הפסולים בטבלאות ובתצוגות החומריות, אפשר להריץ שאילתה בתצוגה g_columnar_relations. כך תוכלו להחליט אם צריך לבצע רענון ידני או לשנות את סף הרענון האוטומטי.

כדי לראות את אחוז הפסילה של כל היחסים במאגר העמודות, מריצים את השאילתה הבאה:

SELECT relation_name, invalid_percentage FROM g_columnar_relations;

כדי לבדוק את אחוז הביטול של טבלה ספציפית, מוסיפים פסקה WHERE לשאילתה.

SELECT   relation_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_relations;
WHERE
 relation_name =  TABLE_NAME

מחליפים את TABLE_NAME במחרוזת שמכילה את שם הטבלה או התצוגה החומרית. אם המשאב נמצא בסכימה אחרת (לא public), צריך לציין את שם הסכימה בפורמט SCHEMA_NAME.TABLE_NAME. לדוגמה: myschema.mytable.

כדי לבדוק את אחוז הפסילה של אינדקס ספציפי, מוסיפים פסקה WHERE לשאילתה.

SELECT   index_name,
  CASE
    WHEN total_block_count > 0 THEN (invalid_block_count * 100.0 / total_block_count)
    ELSE 0.0
  END AS invalid_block_percentage
FROM
  g_columnar_indexes;
WHERE
  index_name = INDEX_NAME

שינוי סף הרענון של מנוע מבוסס-עמודות

כדי לשנות את סף הרענון של מנוע מבוסס-עמודות, צריך לשנות את הערך של google_columnar_engine.refresh_threshold_percentage דגל מסד הנתונים של מופע AlloyDB.

המסוף

  1. נכנסים לדף Clusters במסוף Google Cloud .

    מעבר אל Clusters

  2. לוחצים על שם האשכול שמכיל את המופע שרוצים להגדיר.
  3. בקטע Instances in your cluster (מופעים באשכול), מאתרים את המופע ולוחצים על Edit (עריכה).
  4. בקטע Flags, מוסיפים דגל חדש או משנים את הדגל הקיים google_columnar_engine.refresh_threshold_percentage.
  5. צריך להגדיר את הערך כמספר שלם בין 1 ל-100. הערך הזה מייצג את אחוז הנתונים הלא תקינים שמפעיל רענון.
  6. לוחצים על סיום.

gcloud

כדי להשתמש ב-ה-CLI של gcloud, אפשר להתקין ולהפעיל את Google Cloud CLI, או להשתמש ב-Cloud Shell.

כדי לשנות את סף הרענון של מנוע מבוסס-עמודות, מריצים את הפקודה הבאה:
gcloud alloydb instances update INSTANCE_ID \
    --database-flags=google_columnar_engine.refresh_threshold_percentage=THRESHOLD \
    --cluster=CLUSTER_ID \
    --region=REGION_ID \
    --project=PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • INSTANCE_ID: מזהה המכונה.
  • THRESHOLD: ערך שלם בין 1 ל-100. הערך הזה מציין את אחוז בלוקי הנתונים בתוכן שצריכים להיות לא חוקיים כדי שהתוכן יסומן לרענון.
  • CLUSTER_ID: המזהה של האשכול שבו נמצאת המכונה.
  • REGION_ID: האזור של האשכול.
  • PROJECT_ID: מזהה הפרויקט

רענון ידני של טבלאות ואינדקסים של וקטורים בחנות העמודות

אפשר לרענן ידנית טבלאות ואינדקסים של וקטורים במנוע מבוסס-עמודות בכל שלב באמצעות פונקציות SQL ייעודיות. סוגי האינדקסים הנתמכים הם ScaNN ו-HNSW.

כדי לרענן את הנתונים בטבלה במנוע מבוסס-עמודות, מריצים את הפונקציה google_columnar_engine_refresh.

SELECT google_columnar_engine_refresh(TABLE_NAME);

מחליפים את TABLE_NAME במחרוזת שמכילה את שם הטבלה או התצוגה החומרית. אם המשאב נמצא בסכימה אחרת (לא public), צריך לציין את שם הסכימה בפורמט SCHEMA_NAME.TABLE_NAME. לדוגמה: myschema.mytable.

באופן דומה, כדי לרענן ידנית אינדקס וקטורי במנוע מבוסס-עמודות, מריצים את הפונקציה google_columnar_engine_refresh_index.

SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);

מחליפים את INDEX_NAME במחרוזת שמכילה את שם האינדקס לרענון.