Auf dieser Seite wird die integrierte Spanner-Tabelle beschrieben, in der Statistiken zu Ihren Vektorindexen gespeichert werden. Mithilfe von Vektorindexstatistiken können Sie die Leistung Ihres Vektorindex überprüfen, verbesserungswürdige Bereiche ermitteln und den Index anhand der Messwerte optimieren.
Mit SQL-Anweisungen können Sie Statistiken aus der SPANNER_SYS.VECTOR_INDEX_STATS-Tabelle abrufen.
Spanner stellt die Statistiken für Vektorindexe im Schema SPANNER_SYS bereit. Sie haben folgende Möglichkeiten, auf SPANNER_SYS-Daten zuzugreifen:
Die Spanner Studio-Seite einer Datenbank in der Google Cloud Console.
Die Methode
executeSqloderexecuteStreamingSql.
Statistiken für Vektorindex
SPANNER_SYS.VECTOR_INDEX_STATS enthält die Statistiken zu jedem Vektorindex in Ihrer Datenbank, sortiert nach STATISTICS_COLLECTION_TIMESTAMP.
Cloud Spanner erfasst alle drei Tage Daten zu jedem Vektorindex.
Kurz nach der Erfassung der Daten stellt Spanner die Daten in der Tabelle VECTOR_INDEX_STATS zur Verfügung. Die Informationen in dieser Tabelle geben Aufschluss über Ihren Index. So können Sie Empfehlungen für eine schnellere Vektorsuche-Leistung anpassen und anwenden.
| Spaltenname | Beschreibung | Anleitung zur Abstimmung |
|---|---|---|
START_TIME |
Der Zeitpunkt, zu dem Spanner den Indexmesswert erfasst hat. | Nicht zutreffend |
VECTOR_INDEX_NAME |
Der Name des Vektorindex, wie in der CREATE VECTOR INDEX-Anweisung angegeben. |
Nicht zutreffend |
NUM_LEAVES |
Die Gesamtzahl der Blätter (auch als Cluster bezeichnet), die in diesem Vektorindex verwendet werden. Diese Zahl wird beim Erstellen des Vektorindex festgelegt. Sie kann sich im Laufe der Zeit ändern, da Spanner den Vektorindex adaptiv umformt. | Wenn der indexierten Tabelle nach der Erstellung viele Zeilen hinzugefügt werden, können einige Cluster sehr groß werden, was sich auf die Abfragelatenz auswirken kann. Wir empfehlen, den Index mit mehr Clustern neu zu erstellen, wenn die Anzahl der Cluster im Index gleich oder größer als die Quadratwurzel der Anzahl der Zeilen in der Tabelle ist. |
NUM_ZERO_SIZE_CLUSTERS_SAMPLED |
Die Anzahl der leeren Cluster im Vektorindex, die in der Stichprobe enthalten sind. Leeren Clustern sind keine Zeilen zugewiesen. | Wenn im Laufe der Zeit Zeilen in einer Tabelle hinzugefügt und gelöscht werden, können einige Cluster leer werden. Wenn es viele leere Cluster gibt, ist der Vektorindex wahrscheinlich veraltet. Wenn 10% oder mehr der Cluster leer sind, sollten Sie den Index mit weniger Clustern neu erstellen. Bei den größeren Vektorindexen verwendet Spanner zufällige Stichproben, um die Kosten für Messungen zu begrenzen. Dieser Messwert gibt also die Anzahl der Stichproben von Clustern mit der Größe 0 an. Um dies in die geschätzte Anzahl von Clustern mit der Größe 0 umzuwandeln, können Sie die folgende Abfrage verwenden:
|
CLUSTER_SIZE_PERCENTILES |
Bei einem Vektorindex werden die indexierten Einbettungen in Cluster von ähnlichen Vektoren unterteilt. In dieser Spalte für die Verteilung sind einige Perzentilwerte für die Größen dieser Cluster angegeben. | Beim K-Means-Clustering, das die Vektorindexierung ermöglicht, werden in der Regel Cluster unterschiedlicher Größe erstellt. Daher ist mit einer gewissen Unausgewogenheit zu rechnen. Bei starken Abweichungen bei der Clustergröße wird die Abfrageleistung bei der Suche in den größeren Clustern langsamer. Abweichungen sind schwerwiegend, wenn die Clustergröße im 99. Perzentil mindestens achtmal größer ist als die Clustergröße im 50. Perzentil. Beispielanfrage 1 |
CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES |
Jeder Cluster hat einen Mittelpunkt oder ein Zentroid. Um einen guten Recall zu erzielen, werden Vektoren in der Regel einem nahegelegenen Zentroid zugewiesen, je nach der Konfiguration, die Sie beim Erstellen des Index ausgewählt haben. Für jeden Cluster berechnet Spanner die geschätzte durchschnittliche Entfernung vom Centroid zu allen zugewiesenen Vektoren. Aufgrund der natürlichen Varianz zwischen Clustern wird dieser Messwert in Spanner als Verteilung in Form einer Liste von Perzentilwerten angegeben. | Dieser Messwert ist nicht zwischen Vektorindexen vergleichbar, da euklidische und Kosinus-Indexe unterschiedlich skaliert werden. Behalten Sie diesen Messwert im Zeitverlauf für jeden Vektorindex im Blick. Wenn sich der Wert des 99. Perzentils gegenüber dem bisherigen Tiefstwert verdoppelt, sollten Sie den Index neu erstellen, um ihn wieder zu senken. Beispielabfrage 2 |
Beispielabfrage 1
Mit der folgenden Abfrage wird die Clustergröße des 99. Perzentils geteilt durch die mediane Clustergröße für einen bestimmten Vektorindex im Zeitverlauf ausgegeben. Wenn die Clustergröße im 99. Perzentil mindestens achtmal so groß ist wie die Clustergröße im 50. Perzentil, sollten Sie den Index neu erstellen.“
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;
Ausgabe der Abfrage
| 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 € |
Beispielabfrage 2
Die folgende Abfrage gibt den 99. Perzentil-Abstand zum Schwerpunkt für jeden Vektorindex im Zeitverlauf zurück. Dieser Messwert ist ein indirekter Hinweis auf die Leistung von Recall. Die genaue Bedeutung der Werte hängt von Ihren Einbettungen ab. Jeden Vektorindex einzeln und als Zeitreihe verfolgen. Wenn sich der Wert des 99. Perzentils für einen bestimmten Index gegenüber seinem bisherigen Tiefstwert verdoppelt, sollten Sie den Index neu erstellen.
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;
Ausgabe der Abfrage
| 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 |
Datenaufbewahrung
In der Systemtabelle SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY werden Daten aus den letzten 30 Tagen aufbewahrt.