בדף הזה מתואר טבלת Spanner מובנית שמאחסנת נתונים סטטיסטיים על אינדקסים של וקטורים. אתם יכולים להשתמש בנתונים סטטיסטיים של אינדקס וקטורים כדי לבדוק את הביצועים של אינדקס הווקטורים, לזהות תחומים לשיפור ולכוונן את האינדקס על סמך המדדים.
אפשר לאחזר נתונים סטטיסטיים מהטבלה SPANNER_SYS.VECTOR_INDEX_STATS באמצעות הצהרות SQL.
Spanner מספק את הנתונים הסטטיסטיים של אינדקס הווקטור בסכימה SPANNER_SYS. אפשר לגשת לנתוני SPANNER_SYS
באמצעות הדרכים הבאות:
דף Spanner Studio של מסד נתונים במסוף Google Cloud .
השיטה
executeSqlאו השיטהexecuteStreamingSql.
נתונים סטטיסטיים של אינדקס וקטורי
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 משתמשת בדגימה אקראית כדי להגביל את עלות המדידות. לכן, המדד הזה מייצג את מספר האשכולות בגודל אפס שנדגמו. כדי להמיר את הנתון הזה למספר המשוער של אשכולות בגודל אפס, אפשר להשתמש בשאילתה הבאה:
|
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 הימים האחרונים.