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

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

בדף הזה מפורטות המדדים שקשורים לאינדקסים וקטוריים שאתם יוצרים ב-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 מספר סריקות האינדקס שהתחילו באינדקס
partitioncount 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 מציגים יחד את השינויים או המוטציות בווקטור של האינדקס.
האינדקס נוצר עם מספר מסוים של וקטורים ומחיצות. כשמבצעים פעולות כמו הוספה, עדכון או מחיקה באינדקס הווקטורים, הפעולות משפיעות רק על קבוצת המחיצות הראשונית שבה נמצאים הווקטורים. כתוצאה מכך, מספר הווקטורים בכל מחיצה משתנה לאורך הזמן, וזה יכול להשפיע על ה-recall, על ה-QPS או על שניהם.
אם אתם נתקלים באיטיות או בבעיות דיוק, כמו מספר נמוך של QPS או recall נמוך, בשאילתות החיפוש של ANN לאורך זמן, כדאי לבדוק את המדדים האלה. מספר גבוה של מוטציות ביחס למספר הכולל של הווקטורים יכול להצביע על הצורך ביצירת אינדקס מחדש.
הפצה
המדד distribution מציג את התפלגות הווקטורים בכל המחיצות.
כשיוצרים אינדקס, הוא נוצר עם מספר מסוים של וקטורים ומחיצות קבועות. תהליך החלוקה למחיצות וההפצה שמתבצעים לאחר מכן מתבססים על השיקול הזה. אם מוסיפים עוד וקטורים, הם מחולקים בין המחיצות הקיימות, וכתוצאה מכך נוצרת התפלגות שונה בהשוואה להתפלגות שהייתה כשהאינדקס נוצר. מכיוון שההפצה הסופית לא מתייחסת לכל הווקטורים בו-זמנית, יכול להיות שהיא תשפיע על ה-recall, על ה-QPS או על שניהם.
אם אתם מבחינים בירידה הדרגתית בביצועים של שאילתות החיפוש של ANN, כמו זמני תגובה איטיים יותר או דיוק מופחת בתוצאות (נמדד לפי QPS או אחזור), כדאי לבדוק את המדד הזה וליצור אינדקס מחדש.
אחוזון ההתפלגות
המדד distributionpercentile הוא התפלגות של אינדקס וקטורי בתצוגה pg_stat_ann_indexes, שעוזרת להבין את התפלגות הווקטורים בין המחיצות של אינדקס ScaNN. המחיצות נוצרות על סמך הערך num_leaves שהוגדר במהלך יצירת האינדקס.
כשיוצרים alloydb_scann אינדקס על קבוצת השורות הראשונית על ידי הגדרת num_leaves, האינדקס יכול לשנות את חלוקת הווקטורים בין המחיצות בגלל פעולות על הנתונים (שינויים בהטיה), או שמספר הווקטורים עשוי לגדול באופן משמעותי. השינויים האלה עלולים להוביל לירידה ב-QPS, בזיכרון או בשניהם. התפלגות האינדקס של הווקטורים יכולה לספק לכם אותות אם המוטציה גורמת לשינוי בהתפלגות האינדקס. המידע הזה יכול לעזור לכם להבין אם צריך לבצע אינדוקס מחדש, או אם שינוי בהגדרות של זמן החיפוש יכול לעזור לשפר את הביצועים של השאילתה.
באינדקס וקטורי, ההתפלגות של הווקטורים בין המחיצות היא כמעט אף פעם לא אחידה לחלוטין. חוסר איזון כזה נקרא התפלגות לא אחידה. בדרך כלל צפויה מידה מסוימת של חוסר אחידות, וזה לא אומר שצריך להוסיף את הדפים לאינדקס מחדש. להתפלגות לא אחידה יש את המאפיינים הבאים:
  • השונות של מספר הווקטורים נמוכה. אפשר לחשב את השונות באופן הבא:
    $(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 והאחזור.
התרחישים הבאים פחות נפוצים מהתפלגות לא אחידה, אבל הם יכולים לקרות:
  • אינדקס אחיד משוער: אם לרוב המחיצות יש מספר זהה של וקטורים שאינם אפס, והשונות של מספר הווקטורים נמוכה, זהו אינדקס אחיד משוער. צריך להגדיר את REINDEX אם מספר הווקטורים בכל מחיצה הוא $> 8 * average vector$ ב-index_creation_time.
  • אינדקס דליל: אינדקס דליל מתרחש גם במקרים שבהם יותר מ-50% מהמחיצות ריקות. לדוגמה, אינדקס דליל נוצר כשמתבצעות כמה מחיקות בטבלה. במצב כזה, הווקטורים מרוכזים במספר קטן של מחיצות, מה שמגדיל את מספר הווקטורים בכל מחיצה. במקרה כזה, צריך להסיר את האינדקס וליצור אותו מחדש.