תחזוקה של אינדקסים של וקטורים

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

לפני שמתחילים

  • מתקינים או מעדכנים את התוספים vector ו-alloydb_scann.

    1. אם התוספים vector ו-alloydb_scann לא מותקנים, צריך להתקין את הגרסאות העדכניות של התוספים.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. אם התוספים vector ו-alloydb_scann כבר מותקנים, משדרגים אותם לגרסה העדכנית.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

הצגת מדדים של אינדקס וקטורים

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

מידע נוסף על מדדים זמין במאמר הצגת מדדים של אינדקס וקטורי.

תחזוקה אוטומטית של אינדקסים

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

אתם יכולים להשתמש בדגל scann.enable_preview_features של מסד הנתונים (GUC) יחד עם הפרמטר auto_maintenance ברמת האינדקס כשאתם יוצרים אינדקס ScaNN, כדי להפעיל תחזוקה אוטומטית של אינדקסים של ScaNN.

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

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

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

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

  • INSTANCE_ID: המזהה של המכונה.
  • REGION_ID: האזור שבו המכונה ממוקמת, לדוגמה, us-central1.
  • CLUSTER_ID: המזהה של האשכול שבו נמצאת המכונה.
  • PROJECT_ID: מזהה הפרויקט שבו נמצא האשכול.

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

הפעלה של תחזוקה אוטומטית במהלך יצירת אינדקס

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

CREATE INDEX INDEX_NAME ON TABLE \
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION) \
WITH (mode=MANUAL, num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

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

  • INDEX_NAME: השם של האינדקס שרוצים ליצור, לדוגמה my-scann-index. השמות של האינדקסים משותפים במסד הנתונים. חשוב לוודא שכל שם אינדקס הוא ייחודי לכל טבלה במסד הנתונים.

  • TABLE: הטבלה שאליה רוצים להוסיף את האינדקס.

  • EMBEDDING_COLUMN: עמודה שמאחסנת נתונים vector.

  • DISTANCE_FUNCTION: פונקציית המרחק לשימוש באינדקס הזה. צריך לבחור אחת מהאפשרויות:

    • מרחק L2: l2

    • מכפלה סקלרית: dot_product

    • מרחק קוסינוס: cosine

  • NUM_LEAVES_VALUE: מספר המחיצות שיוחלו על האינדקס הזה. הערך יכול להיות בין 1 ל-1048576. מידע נוסף על האופן שבו מחליטים על הערך הזה זמין במאמר בנושא התאמה של אינדקס ScaNN.

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

הגדרת pct_leaves_to_search לתחזוקה אוטומטית של האינדקס

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

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

מגדירים את הערך הזה לאחוז ממספר המחיצות הנוכחי. לדוגמה, כדי לחפש 1% ממספר המחיצות הנוכחי, מגדירים את הערך הזה ל-1.

אפשר להגדיר את הפרמטר הזה לכל ערך בין 0 ל-100. ערך ברירת המחדל הוא 0, שמשבית את הפרמטר הזה ומשתמש בפרמטר scann.num_leaves_to_search כדי לחשב את מספר העלים שצריך לחפש.

כדי להגדיר את הדגל pct_leaves_to_search במסד הנתונים, מריצים את הפקודה הבאה:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

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

  • DATABASE_NAME: שם מסד הנתונים.
  • PERCENTAGE_LEAVES_TO_SEARCH: אחוז הנתונים num_leaves לחיפוש.

הפעלה ידנית של תחזוקת האינדקס

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

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

SELECT scann_index_maintenance('INDEX_NAME');

בנייה מחדש של האינדקס באופן ידני

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

כדי לבנות מחדש את האינדקס באופן ידני, מריצים את הפקודה הבאה:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

מחליפים את INDEX_NAME בשם האינדקס שרוצים לבנות מחדש, לדוגמה, my-scann-index. השמות של האינדקסים משותפים במסד הנתונים. חשוב לוודא שכל שם אינדקס הוא ייחודי לכל טבלה במסד הנתונים.

מידע נוסף על יצירה מחדש של אינדקסים ב-PostgreSQL זמין במאמר בנושא REINDEX.

המאמרים הבאים