כדי לוודא שהאינדקסים של הווקטורים יתאימו לשינויים שעשויים להשפיע על הדיוק של תוצאות החיפוש, צריך לתחזק את האינדקסים של הווקטורים.
לפני שמתחילים
לפני שמנהלים את תחזוקת האינדקס, צריך להתקין או לעדכן את התוספים 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: מספר המחיצות שצריך להחיל על האינדקס הזה. אפשר להגדיר כל ערך בין3ל-1048576. למידע נוסף על האופן שבו מחליטים על הערך הזה, ראו כוונון אינדקס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 = 'AUTOMATIC', auto_maintenance = 'OFF');
כדי להשבית את התחזוקה האוטומטית באינדקס ScaNN קיים שעבר כוונון אוטומטי, קראו את המאמר הגדרת תחזוקה אוטומטית לאינדקסים קיימים.
בנייה מחדש של האינדקס באופן ידני
אם הטבלה שלכם מתעדכנת או מתווספים אליה נתונים לעיתים קרובות, מומלץ לבנות מחדש את אינדקס ScaNN מדי פעם כדי לשפר את דיוק ה-recall. איך בודקים את המדדים של אינדקס וקטורי
כדי לבנות מחדש באופן ידני את האינדקס באמצעות ההגדרות המקוריות שלו, מריצים את הפקודה הבאה:
REINDEX INDEX CONCURRENTLY INDEX_NAME;
מחליפים את INDEX_NAME בשם של האינדקס שרוצים לבנות מחדש. לדוגמה, my_scann_index.
למידע נוסף על הוספה מחדש לאינדקס ב-PostgreSQL, ראו REINDEX.