כדי לוודא שמדדי הווקטור יותאמו לשינויים שעשויים להשפיע על הדיוק של תוצאות החיפוש, חשוב לתחזק את מדדי הווקטור.
לפני שמתחילים
לפני שמנהלים את התחזוקה של האינדקס, צריך להתקין או לעדכן את התוספים 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 לנהל באופן אוטומטי את מדדי הווקטורים. ככל שמערך הנתונים גדל, מערכת AlloyDB מנתחת את מרכזי הכובד ומעדכנת אותם, ומפצלת מחיצות גדולות של חריגים. כך משפרים באופן אוטומטי את מספר השאילתות לשנייה (QPS) ואת איכות תוצאות החיפוש. כל העדכונים האוטומטיים הם קבועים עד להרצת התחזוקה הבאה.
ב-AlloyDB, תחזוקת אינדקסים אוטומטית מופעלת כברירת מחדל עבור אינדקסים של 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 מנהלת ומכוונת באופן אוטומטי את מבנה האינדקס. ערך ברירת המחדל שלauto_maintenance, כש-modeמוגדר כ-AUTO, הוא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. הגדלת מספר העובדים ברקע מגדילה את מספר האינדקסים שעוברים עיבוד ליחידת זמן. היא לא מקצרת את זמן העיבוד של אינדקסים בודדים. הערך הזה צריך להיות קטן מהערך max_worker_processes שמוגדר לאשכול מסד הנתונים.
מידע נוסף על הגדרת דגלים של מסד נתונים זמין במאמר בנושא הגדרת דגלים של מסד נתונים במופע.
הארכת ההשהיה של התחזוקה האוטומטית
כדי להגדיל את משך ההשהיה בין הפעלות אוטומטיות של תחזוקה, מגדירים את הדגל של מסד הנתונים scann.maintenance_background_naptime_s.
מידע נוסף על הגדרת דגלים של מסד נתונים זמין במאמר בנושא הגדרת דגלים של מסד נתונים במופע.
אחוז המחיצות בחיפוש
ככל שמספר המחיצות גדל כתוצאה מפיצול אוטומטי של מחיצות גדולות חריגות על ידי AlloyDB, מומלץ להתאים את מספר העלים שמתבצע בהם חיפוש כדי לשמור על ביצועים אופטימליים. כדי לנהל את המספר הזה באופן אוטומטי, צריך להגדיר את הפרמטר 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 היא 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 באופן תקופתי כדי לשפר את דיוק האחזור שלו. למידע נוסף על צפייה בשינויים בהתפלגויות וקטוריות או במוטציות מאז בניית האינדקס, אפשר לעיין במאמר צפייה במדדים של אינדקס וקטורי.
כדי לבנות מחדש את האינדקס באופן ידני באמצעות ההגדרות המקוריות שלו, מריצים את הפקודה הבאה:
REINDEX INDEX CONCURRENTLY INDEX_NAME;
מחליפים את INDEX_NAME בשם של האינדקס שרוצים לבנות מחדש. לדוגמה, my_scann_index.
מידע נוסף על יצירה מחדש של אינדקסים ב-PostgreSQL זמין במאמר בנושא REINDEX.