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

בחירת גרסת תיעוד:

בדף הזה נסביר איך לשמור על עדכניות הנתונים בחנות העמודות של מנוע מבוסס-העמודות ב-AlloyDB Omni באמצעות כלי התיזמור RPM.

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

עם הזמן, ככל שיותר ויותר בלוקים של נתונים הופכים ללא חוקיים, השיפורים בביצועי השאילתות שמספק המנוע מבוסס-העמודות מצטמצמים עד לנקודה שבה צריך לרענן את הנתונים מבוססי-העמודות כדי לשחזר את השיפורים בביצועי השאילתות. כשמגיעים לסף מינימלי לרענון הזה, מנוע מבוסס-עמודות משתמש בעבודת רקע כדי לרענן את הנתונים הלא תקינים במאגר העמודות. כברירת מחדל, המנוע מבוסס-העמודות משתמש בסף מינימלי לרענון של 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

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

כדי לשנות את סף הרענון של מנוע העמודות, מבצעים את השלבים הבאים:

  1. פותחים את המניפסט של אשכול מסד הנתונים DBCluster.

  2. בקטע primarySpec, מוסיפים את הפרמטר google_columnar_engine.refresh_threshold_percentage לבלוק parameters:

    DBCluster:
      metadata:
        name: DB_CLUSTER_NAME
      spec:
        # ... existing cluster configuration ...
        primarySpec:
          # ... existing primary configuration ...
          parameters:
            google_columnar_engine.refresh_threshold_percentage: "THRESHOLD"
    

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

    • ‫DB_CLUSTER_NAME: השם של אשכול מסד הנתונים.
    • ‫THRESHOLD: מספר שלם בין 1 ל-100. הערך הזה מציין את אחוז בלוקי הנתונים בתוכן שצריכים להיות לא חוקיים כדי שהתוכן יסומן לרענון.
  3. התזמור של RPM מפעיל מחדש את מסד הנתונים באופן אוטומטי כדי להחיל את השינויים בפרמטרים. מחילים את המניפסט המעודכן של DBCluster באחת מהשיטות הבאות:

    alloydbctl

    alloydbctl apply -d "DEPLOYMENT_SPEC_PATH" -r "DBCLUSTER_SPECIFICATION"

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

    • ‫DEPLOYMENT_SPEC_PATH: הנתיב לספריית מפרט הפריסה.
    • ‫DBCLUSTER_SPECIFICATION: הנתיב למניפסט DBCluster ששיניתם.

    Ansible

    1. יוצרים קובץ של תוכנית הפעולה update.yml:

      ---
      - hosts: localhost
        vars:
          update_action: "update_resource_spec"
          ansible_user: SSH_USER
          ansible_ssh_private_key_file: SSH_KEY_PATH
        roles:
          - role: google.alloydbomni_orchestrator.update
      

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

      • ‫SSH_USER: שם המשתמש שבו אתם משתמשים כדי להתחבר לצמתים באשכול באמצעות SSH.
      • ‫SSH_KEY_PATH: הנתיב המקומי לקובץ של מפתח ה-SSH הפרטי שמשמש להתחברות לצמתים.
    2. מריצים את ה-playbook מצומת הבקרה, ומעבירים את מפרט המשאב כמשתנה נוסף:

      ansible-playbook -i "DEPLOYMENT_SPEC_PATH" update.yml \
        -e resource_spec="DBCLUSTER_SPECIFICATION"

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

      • ‫DEPLOYMENT_SPEC_PATH: הנתיב לספריית מפרט הפריסה.
      • ‫DBCLUSTER_SPECIFICATION: הנתיב למניפסט של DBCluster ששיניתם.

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

אפשר לרענן ידנית טבלאות ואינדקסים של וקטורים במנוע מבוסס-עמודות בכל שלב באמצעות פונקציות 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 במחרוזת שמכילה את שם האינדקס שרוצים לרענן.