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

בוחרים גרסה של מאמרי העזרה:

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

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

לפני שמנהלים את תחזוקת האינדקס, מתקינים או מעדכנים את התוספים vector ו-alloydb_scann:

  • אם התוספים vector ו-alloydb_scann לא מותקנים, מתקינים אותם.

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

    ALTER EXTENSION vector UPDATE;
    ALTER EXTENSION alloydb_scann UPDATE;
    

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

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

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

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

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

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

CREATE INDEX INDEX_NAME ON TABLE_NAME
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME)
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);

מחליפים את המשתנים הבאים:

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

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

  • ‫EMBEDDING_COLUMN_NAME: עמודה שבה מאוחסנים נתוני vector שרוצים להוסיף לאינדקס.

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

    • מרחק L2: l2

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

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

  • ‫INDEX_MODE: המצב שבו יוצרים את האינדקס של ScaNN. אלה הערכים הזמינים:

    • ‫AUTO: AlloyDB Omni מנהל ומכוונן באופן אוטומטי את מבנה האינדקס. אם המדיניות mode מוגדרת לערך AUTO, ערך ברירת המחדל של המדיניות auto_maintenance הוא on.

    • ‫MANUAL: ניהול וכוונון ידני של אינדקס ScaNN. ערך ברירת המחדל של auto_maintenance, כש-mode מוגדר ל-MANUAL, הוא off.

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

  • ‫NUM_PARTITIONS: מספר המחיצות שצריך להחיל על האינדקס הזה. מגדירים את הערך הזה לכל מספר בין מיליון אחד ל-100 מיליון ב-PostgreSQL מגרסה 17 ומעלה, או בין מיליון אחד ל-30 מיליון ב-PostgreSQL מגרסה 16 ומטה. למידע נוסף על האופן שבו מחליטים על הערך הזה, ראו כוונון אינדקס ScaNN.

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

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

ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);

מחליפים את המשתנים הבאים:

  • ‫INDEX_NAME: שם האינדקס שרוצים לשנות. לדוגמה, my_scann_index.

  • ‫AUTOMATIC_MAINTENANCE: הפעלה או השבתה של תחזוקה אוטומטית. כדי להפעיל, צריך להגדיר את הערך on. כדי להשבית, מגדירים את הערך off.

הגדלת קצב התחזוקה האוטומטית

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

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

הארכת ההשהיה של התחזוקה האוטומטית

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

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

אחוז המחיצות בחיפוש

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

‫scann.pct_leaves_to_search מייצג את אחוז המחיצות הנוכחיות לחיפוש. אפשר להגדיר את הפרמטר הזה לכל ערך בין 0 ל-100. ערך ברירת המחדל הוא 0, שמשבית את הפרמטר הזה ומשתמש במקום זאת בערך שמוגדר ב-scann.num_leaves_to_search. אם גם scann.num_leaves_to_search מוגדר ל-0, אז AlloyDB Omni מוגדר כברירת מחדל ל-1% של עלים.

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

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

ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;

מחליפים את המשתנים הבאים:

  • ‫DB_NAME: שם מסד הנתונים.

  • ‫PERCENTAGE_PARTITIONS_TO_SEARCH: אחוז המחיצות לחיפוש.

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

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

SELECT scann_index_maintenance('INDEX_NAME');

מחליפים את INDEX_NAME בשם של האינדקס שרוצים להפעיל בו את התחזוקה. לדוגמה, my_scann_index.

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

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

CREATE INDEX similarity_index ON products
       USING scann (description_embedding cosine)
WITH (MODE = 'AUTO', auto_maintenance = 'OFF');

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

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

אם הטבלה שלכם מתעדכנת לעיתים קרובות או שנוספים אליה נתונים, מומלץ לבנות מחדש את אינדקס ScaNN מדי פעם כדי לשפר את דיוק ה-recall. איך בודקים את המדדים של אינדקס וקטורי

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

REINDEX INDEX CONCURRENTLY INDEX_NAME;

מחליפים את INDEX_NAME בשם של האינדקס שרוצים לבנות מחדש. לדוגמה, my_scann_index.

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

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

* [מדדים של אינדקס וקטורי](/alloydb/omni/linux/18.1.0/docs/reference/vector-index-metrics)