מדדים של אינדקס וקטורי

בחירת גרסת תיעוד:

בדף הזה מפורטות המדדים שקשורים לאינדקסים של וקטורים שאתם יוצרים ב-AlloyDB Omni. אפשר לראות את המדדים האלה באמצעות התצוגה pg_stat_ann_indexes שזמינה כשמתקינים את התוסף alloydb_scann.

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

מדדי נוחות שימוש

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

שם המדד סוג נתונים תיאור
relid OID מזהה ייחודי של הטבלה שמכילה את אינדקס הווקטור
indexrelid OID מזהה ייחודי של אינדקס הווקטור
schemaname NAME שם הסכימה שהאינדקס שייך לה
relname NAME שם הטבלה שמכילה את האינדקס
indexrelname NAME שם האינדקס
indextype NAME סוג האינדקס. הערך הזה תמיד מוגדר ל-scann
indexconfig TEXT[] ההגדרה, כמו ספירת העלים והקוונטיזציה, שהוגדרה לאינדקס כשהוא נוצר
indexsize TEXT גודל האינדקס
indexscan BIGINT מספר הסריקות של האינדקס שהופעלו באינדקס

מדדי התאמה

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

שם המדד סוג נתונים תיאור
insertcount BIGINT מספר פעולות ההוספה באינדקס. המדד הזה כולל גם את מספר השורות שהיו קיימות לפני יצירת האינדקס.
updatecount BIGINT מספר פעולות העדכון באינדקס. המדד הזה לא כולל עדכוני HOT.
deletecount BIGINT מספר פעולות המחיקה באינדקס.
distribution JSONB התפלגויות וקטוריות בכל המחיצות של האינדקס.

השדות הבאים מציגים את ההתפלגות:
  • maximum (INT8): המספר המקסימלי של וקטורים בכל המחיצות.
  • minimum (INT8): מספר הווקטורים המינימלי בכל המחיצות.
  • average (FLOAT) : המספר הממוצע של וקטורים בכל המחיצות.
  • outliers (INT8[]): חריגים מובילים בכל המחיצות. הערך הזה מציג את 20 החריגים המובילים.

הערה: בגלל המאפיינים המובנים של אלגוריתם האשכולות K-means, תמיד יהיה מידה מסוימת של שונות בחלוקת הווקטורים בין המחיצות, גם כשיוצרים את האינדקס בהתחלה.
distributionpercentile JSONB התפלגות אינדקס הווקטורים עוזרת להבין את התפלגות הווקטורים בין המחיצות של אינדקס ScaNN. המחיצות נוצרות על סמך ערך num_leaves שמוגדר במהלך יצירת האינדקס.

חלוקת אינדקס הווקטורים מכילה קטגוריות של אחוזונים: 10, 25, 50, 75, 90, 95, 99 ו-100. כל משבצת מכילה את הערכים הבאים:
  • מספר הווקטורים במחיצה באחוזון שצוין.
  • מספר המחיצות שיש בהן וקטורים בטווח שמוגדר על ידי האחוזונים הנוכחיים והקודמים.

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

המלצה להתאמה אישית על סמך המדדים

מוטציה
המדדים insertcount, updatecount, deletecount מציגים יחד את השינויים או המוטציות בווקטור של האינדקס.
האינדקס נוצר עם מספר מסוים של וקטורים ומחיצות. כשמבצעים פעולות כמו הוספה, עדכון או מחיקה באינדקס הווקטורים, הפעולות משפיעות רק על קבוצת המחיצות הראשונית שבה נמצאים הווקטורים. כתוצאה מכך, מספר הווקטורים בכל מחיצה משתנה לאורך זמן, ויכול להיות שזה ישפיע על ההחזרה, על QPS או על שניהם.
אם אתם נתקלים בבעיות של איטיות או דיוק, כמו QPS נמוך או recall נמוך, בשאילתות החיפוש של ANN לאורך זמן, כדאי לבדוק את המדדים האלה. מספר גבוה של מוטציות ביחס למספר הכולל של הווקטורים יכול להצביע על הצורך ליצור מחדש את האינדקס.
הפצה
המדד distribution מציג את התפלגויות הווקטורים בכל המחיצות.
כשיוצרים אינדקס, הוא נוצר עם מספר מסוים של וקטורים ומחיצות קבועות. תהליך החלוקה למחיצות וההפצה שמתבצעים לאחר מכן מתבססים על השיקול הזה. אם מוסיפים עוד וקטורים, הם מחולקים בין המחיצות הקיימות, וכתוצאה מכך מתקבלת חלוקה שונה בהשוואה לחלוקה שהתקבלה כשנוצר האינדקס. מכיוון שהחלוקה הסופית לא מתבצעת על כל הווקטורים בו-זמנית, יכול להיות שהזיכרון, השאילתות לשנייה או שניהם יושפעו.
אם אתם מבחינים בירידה הדרגתית בביצועים של שאילתות החיפוש שלכם ב-ANN, כמו זמני תגובה איטיים יותר או דיוק מופחת בתוצאות (שנמדד על ידי QPS או recall), כדאי לבדוק את המדד הזה ולבצע אינדוקס מחדש.
אחוזון ההפצה
המדד distributionpercentile הוא חלוקת אינדקס הווקטורים בתצוגה pg_stat_ann_indexes, שעוזרת להבין את חלוקת הווקטורים בין המחיצות של אינדקס ScaNN. המחיצות נוצרות על סמך הערך num_leaves שמוגדר במהלך יצירת האינדקס.
כשיוצרים אינדקס alloydb_scann על קבוצת השורות הראשונית על ידי הגדרת num_leaves, האינדקס יכול לשנות את חלוקת הווקטורים בין המחיצות בגלל פעולות על הנתונים (שינויים בהטיה), או שמספר הווקטורים עשוי לגדול באופן משמעותי. השינויים האלה עלולים להוביל לירידה בערכי השאילתות לשנייה, בערכי ההחזרה או בשניהם. הפילוג של אינדקס הווקטורים יכול לספק לכם אותות אם המוטציה גורמת לשינוי בפילוג של האינדקס. המידע הזה יכול לעזור לכם להבין אם צריך לבצע אינדוקס מחדש, או אם שינוי בהגדרות של זמן החיפוש יכול לעזור לשפר את הביצועים של השאילתות.
באינדקס וקטורים, ההתפלגות של הווקטורים בין המחיצות היא לרוב לא אחידה לחלוטין. חוסר איזון כזה נקרא חלוקה לא אחידה. לרוב צפויים הבדלים מסוימים בין המיקומים, וזה לא אומר שצריך ליצור אינדקס מחדש. לפיזור לא אחיד יש את המאפיינים הבאים:
  • השונות של מספר הווקטורים נמוכה. השונות יכולה להיות מחושבת כ
    ‪$(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • מספר המחיצות עם 0 וקטורים נמוך, ויכול להיות שהוא פחות מ-30% מהמחיצות.
  • השונות של מספר המחיצות נמוכה.
    ‫$ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ כאשר p הוא וקטור של אינדקסים של משבצות חלוקה.
  • מספר הווקטורים באחוזון כלשהו הוא
    ‪$< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    אם התנאים האלה לא מתקיימים, יכול להיות שיהיה צורך ב-REINDEX בהתאם למידת ההשפעה על QPS ועל recall.
התרחישים הבאים, שהם פחות נפוצים מהפצה לא אחידה, יכולים להתרחש:
  • אינדקס אחיד משוער: כשברוב המחיצות יש אותו מספר של וקטורים שאינם אפס, והשונות של מספר הווקטורים נמוכה, זהו אינדקס אחיד משוער. REINDEX נדרש אם וקטורי המספרים בכל מחיצה הם> 8 * וקטור ממוצע ב-index_creation_time.
  • אינדקס דליל: אינדקס דליל נוצר גם במקרים שבהם יותר מ-50% מהמחיצות ריקות. לדוגמה, אינדקס דליל נוצר כשמתבצעות כמה מחיקות בטבלה. במקרה כזה, הווקטורים ירוכזו במספר קטן של מחיצות, מה שיגדיל את מספר הווקטורים בכל מחיצה. במקרה כזה, צריך להסיר את האינדקס וליצור אותו מחדש.