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

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

אפשר לאחזר נתונים סטטיסטיים מהטבלה SPANNER_SYS.VECTOR_INDEX_STATS באמצעות הצהרות SQL.

‫Spanner מספק את הנתונים הסטטיסטיים של אינדקס הווקטור בסכימה SPANNER_SYS. אפשר לגשת לנתוני SPANNER_SYS באמצעות הדרכים הבאות:

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

SPANNER_SYS.VECTOR_INDEX_STATS מכילה את הנתונים הסטטיסטיים לגבי כל אינדקס וקטורי במסד הנתונים, ממוינים לפי STATISTICS_COLLECTION_TIMESTAMP. ‫Spanner אוסף נתונים על כל אינדקס וקטורי כל שלושה ימים. זמן קצר אחרי איסוף הנתונים, הם זמינים בטבלה VECTOR_INDEX_STATS ב-Spanner. המידע שמופיע בטבלה הזו מספק תובנות לגבי האינדקס, ומאפשר לכם לשפר את הביצועים של חיפוש וקטורי מהיר וליישם המלצות.

שם העמודה תיאור הנחיות לכוונון
START_TIME השעה שבה Spanner אסף את מדד האינדקס. לא רלוונטי
VECTOR_INDEX_NAME שם אינדקס הווקטור, כפי שמצוין בהצהרה CREATE VECTOR INDEX. לא רלוונטי
NUM_LEAVES המספר הכולל של העלים (נקראים גם אשכולות) שמשמשים באינדקס הווקטורי הזה. המספר הזה נקבע בזמן יצירת אינדקס הווקטורים. יכול להיות שהערך ישתנה עם הזמן, כי Spanner משנה את צורת אינדקס הווקטור באופן דינמי. אם מוסיפים הרבה שורות לטבלה המאונדקסת אחרי היצירה שלה, יכול להיות שחלק מהאשכולות יהפכו לגדולים מאוד, מה שיכול להשפיע על זמן האחזור של השאילתות. מומלץ לבנות מחדש את האינדקס עם יותר אשכולות אם מספר האשכולות באינדקס שווה לשורש הריבועי של מספר השורות בטבלה או גדול ממנו.
NUM_ZERO_SIZE_CLUSTERS_SAMPLED מספר האשכולות הריקים שנדגמו באינדקס הווקטורי. אשכולות ריקים לא מקבלים שורות.

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

SELECT NUM_ZERO_SIZE_CLUSTERS_SAMPLED / NUM_CLUSTERS_SAMPLED AS ESTIMATED_PERCENT_OF_CLUSTERS_WITH_SIZE_ZERO

CLUSTER_SIZE_PERCENTILES אינדקס וקטורי מחלק את ההטמעות שנוספו לאינדקס לאשכולות של וקטורים קרובים. בעמודת הפיזור הזו מוצגים כמה ערכים של אחוזונים של גדלי האשכולות האלה. תהליך האשכול של K-means, שמפעיל את יצירת האינדקס של הווקטורים, בדרך כלל יוצר אשכולות בגדלים שונים. כתוצאה מכך, צפוי חוסר איזון מסוים. אם יש הבדלים משמעותיים בגודל האשכול, הביצועים של השאילתה יהיו איטיים יותר כשמחפשים באשכולות הגדולים יותר. הסטיות חמורות אם גודל האשכולון באחוזון ה-99 גדול פי 8 לפחות מגודל האשכולון באחוזון ה-50. דוגמה לשאילתה 1
CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES לכל אשכול יש נקודת מרכז, או צנטרואיד. כדי להשיג ערכי recall טובים, בדרך כלל וקטורים מוקצים למרכז מסה קרוב, בהתאם להגדרה שבחרתם במהלך יצירת האינדקס. לכל אשכול, מערכת Spanner מחשבת את המרחק הממוצע המשוער מנקודת המרכז לכל הווקטורים שהוקצו. בגלל השונות הטבעית בין האשכולות, Spanner מדווח על המדד הזה כהתפלגות, שמוצגת כרשימה של ערכי אחוזונים. אי אפשר להשוות את המדד הזה בין מדדי וקטורים (בפרט, יש הבדל בין מדדי Euclidean לבין מדדי קוסינוס). עוקבים אחרי המדד הזה לאורך זמן לכל אינדקס וקטור בנפרד. אם ערך האחוזון ה-99 גדל פי שניים מהערך הנמוך ביותר שלו בעבר, כדאי לשקול לבנות מחדש את האינדקס כדי להקטין אותו. דוגמה לשאילתה 2

שאילתה לדוגמה 1

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

 SELECT VECTOR_INDEX_NAME,
        START_TIME,
        SUM(CASE WHEN percentile = 99 THEN value_at_percentile ELSE 0 END)
        / SUM(CASE WHEN percentile = 50 THEN value_at_percentile ELSE 0 END) as cluster_size_imbalance
FROM (
  SELECT v.VECTOR_INDEX_NAME,
         v.START_TIME, d.percentile,
         d.value_at_percentile
  FROM SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY AS v,
  UNNEST(v.CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES)
AS d)
WHERE VECTOR_INDEX_NAME = "VecIndex2"
GROUP BY 1, 2;

פלט השאילתה

VECTOR_INDEX_NAME START_TIME cluster_size_imbalance
VecIndex2 2025-12-10 10:09:55.322415+00:00 3.288
VecIndex2 2025-12-07 10:10:02.362223+00:00 3.11
VecIndex2 2025-12-04 10:09:55.180895+00:00 2.98
VecIndex2 2025-12-01 10:10:01.680543+00:00 ‫3.01
VecIndex2 2025-11-28 10:10:02.130079+00:00 2.99

שאילתה לדוגמה 2

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

SELECT v.VECTOR_INDEX_NAME,
       v.START_TIME,
       d.value_at_percentile AS distance_to_centroid_99p
FROM SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY AS v,
UNNEST(v.CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES) AS d
WHERE d.percentile=99
ORDER BY VECTOR_INDEX_NAME, START_TIME DESC;

פלט השאילתה

VECTOR_INDEX_NAME START_TIME distance_to_centroid_99p
ANNVectorBase_VI 2025-12-10 10:09:55.322415+00:00 1.109
ANNVectorBase_VI 2025-12-07 10:10:02.362223+00:00 ‫1.11
ANNVectorBase_VI 2025-12-04 10:09:55.180895+00:00 1.18
ANNVectorBase_VI 2025-12-01 10:10:01.680543+00:00 ‫1.11
ANNVectorBase_VI 2025-11-28 10:10:02.130079+00:00 ‫1.04

שמירת נתונים

בטבלת המערכת SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY נשמרים נתונים מ-30 הימים האחרונים.

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