כשמוסיפים, מוחקים או מעדכנים שורות בטבלה, מנוע מבוסס-עמודות לא מעדכן את הנתונים במאגר העמודות באופן מיידי. במקום זאת, הוא מסמן את התוכן המושפע במאגר העמודות כלא חוקי, והשאילתות מתוכננות ומבוצעות באמצעות נתונים מוכווני עמודות ממאגר העמודות ונתונים מוכווני שורות מהמטמון של השורות ומאחסון מסד הנתונים.
עם הזמן, ככל שיותר ויותר בלוקי נתונים הופכים ללא תקפים, שיפורי הביצועים של השאילתות שמספק המנוע מבוסס-העמודות מצטמצמים עד לנקודה שבה צריך לרענן את הנתונים מבוססי-העמודות כדי לשפר שוב את הביצועים של השאילתות. כשמגיעים לסף מינימלי לרענון הזה, מנוע מבוסס-עמודות משתמש בעבודת רקע כדי לרענן את הנתונים הלא תקינים במאגר העמודות. כברירת מחדל, מנוע העמודות משתמש בסף רענון של 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.
ALTER SYSTEM SET google_columnar_engine.refresh_threshold_percentage=THRESHOLD;
מחליפים את THRESHOLD בערך מספרי שלם בין 1 ל-100. הערך הזה מציין את אחוז בלוקי הנתונים בתוכן שצריכים להפוך ללא חוקיים כדי שהתוכן יסומן לרענון.
רענון ידני של טבלאות ואינדקסים וקטוריים במאגר העמודות
אתם יכולים לרענן באופן ידני טבלאות ואינדקסים של וקטורים במנוע מבוסס-העמודות בכל שלב, באמצעות פונקציות 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 במחרוזת שמכילה את שם האינדקס שרוצים לרענן.