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

בדף הזה נסביר איך לשמור על עדכניות הנתונים בחנות העמודות של מנוע מבוסס-עמודות ב-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 database flag במופע 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: מזהה הפרויקט

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

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

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

SELECT google_columnar_engine_refresh(TABLE_NAME);

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

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

SELECT google_columnar_engine_refresh_index(index => INDEX_NAME);

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