Questa pagina descrive la tabella Spanner integrata che memorizza le statistiche sugli indici vettoriali. Puoi utilizzare le statistiche dell'indice vettoriale per esaminare il rendimento dell'indice vettoriale, identificare le aree di miglioramento e ottimizzare l'indice in base alle metriche.
Puoi recuperare le statistiche dalla tabella SPANNER_SYS.VECTOR_INDEX_STATS
utilizzando istruzioni SQL.
Spanner fornisce le statistiche dell'indice vettoriale nello schema SPANNER_SYS. Puoi utilizzare i seguenti modi per accedere ai dati di SPANNER_SYS:
La pagina Spanner Studio di un database nella console Google Cloud .
Il comando
gcloud spanner databases execute-sql.
Statistiche dell'indice vettoriale
SPANNER_SYS.VECTOR_INDEX_STATS contiene le statistiche su ogni indice vettoriale
nel tuo database, ordinate per STATISTICS_COLLECTION_TIMESTAMP.
Spanner raccoglie dati su ogni indice vettoriale ogni tre giorni.
Poco dopo la raccolta dei dati, Spanner li rende disponibili
nella tabella VECTOR_INDEX_STATS. Le informazioni contenute in questa tabella forniscono
approfondimenti sul tuo indice, consentendoti di ottimizzare e applicare i suggerimenti per
migliorare le prestazioni della ricerca vettoriale.
| Nome colonna | Descrizione | Guida all'ottimizzazione |
|---|---|---|
START_TIME |
L'ora in cui Spanner ha raccolto la metrica dell'indice. | Non applicabile |
VECTOR_INDEX_NAME |
Il nome dell'indice vettoriale, indicato nell'istruzione
CREATE VECTOR INDEX. |
Non applicabile |
NUM_LEAVES |
Il numero totale di foglie (note anche come cluster) utilizzate in questo indice vettoriale. Questo numero viene determinato al momento della creazione dell'indice vettoriale. Potrebbe cambiare nel tempo man mano che Spanner rimodella in modo adattivo l'indice vettoriale. | Se dopo la creazione vengono aggiunte molte righe alla tabella indicizzata, è possibile che alcuni cluster diventino piuttosto grandi, il che può influire sulla latenza delle query. Ti consigliamo di ricompilare l'indice con più cluster se il numero di cluster nell'indice è maggiore o uguale alla radice quadrata del numero di righe della tabella. |
NUM_ZERO_SIZE_CLUSTERS_SAMPLED |
Il numero campionato di cluster vuoti nell'indice vettoriale. I cluster vuoti non hanno righe assegnate. | Man mano che le righe vengono aggiunte ed eliminate da una tabella nel tempo, alcuni cluster potrebbero diventare vuoti. Se sono presenti molti cluster vuoti, l'indice dei vettori è probabilmente obsoleto. Se il 10% o più dei cluster sono vuoti, valuta la possibilità di ricompilare l'indice con meno cluster. Per gli indici di vettori più grandi, Spanner utilizza il campionamento casuale per limitare il costo delle misurazioni. Pertanto, questa metrica rappresenta il numero di cluster di dimensioni zero campionati. Per convertire questo valore nel numero stimato di cluster di dimensione zero, puoi utilizzare la seguente query:
|
CLUSTER_SIZE_PERCENTILES |
Un indice vettoriale divide gli embedding indicizzati in cluster di vettori vicini. Questa colonna di distribuzione fornisce alcuni valori percentili delle dimensioni di questi cluster. | Il processo di clustering delle K-means, che supporta l'indicizzazione dei vettori, in genere produce cluster di dimensioni variabili. Di conseguenza, è previsto un certo squilibrio. Se si verificano deviazioni significative nelle dimensioni dei cluster, le prestazioni delle query rallentano durante la ricerca nei cluster più grandi. Le deviazioni sono gravi se la dimensione del cluster del 99° percentile è almeno 8 volte superiore a quella del cluster del 50° percentile. Vedi esempio di query 1. |
CLUSTER_AVERAGE_DISTANCE_TO_CENTROID_PERCENTILES |
Ogni cluster ha un punto centrale, o centroide. Per ottenere un buon richiamo, i vettori vengono generalmente assegnati a un centroide vicino, in base alla configurazione scelta durante la creazione dell'indice. Per ogni cluster, Spanner calcola la distanza media stimata dal centroide a tutti i vettori assegnati. A causa della varianza naturale tra i cluster, Spanner riporta questa metrica come distribuzione, fornita come elenco di valori percentili. | Questa metrica non è confrontabile tra gli indici vettoriali (in particolare, gli indici euclidei e gli indici del coseno vengono scalati in modo diverso). Monitora questa metrica nel tempo per ogni indice vettoriale singolarmente. Se il valore del 99° percentile raddoppia rispetto al minimo storico, valuta la possibilità di ricompilare l'indice per riportarlo al valore precedente. Vedi esempio di query 2. |
Query di esempio 1
La seguente query riporta la dimensione del cluster del 99° percentile divisa per la dimensione mediana del cluster per un indice vettoriale specifico nel tempo. Se la dimensione del cluster del 99° percentile è almeno 8 volte maggiore della dimensione del cluster del 50° percentile, valuta la possibilità di ricompilare l'indice."
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;
Output della query
| 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 € |
Query di esempio 2
La seguente query riporta la distanza dal centroide del 99° percentile per ogni indice vettoriale nel tempo. Questa metrica è un'indicazione indiretta delle prestazioni del richiamo. Il significato esatto dei valori dipende dagli incorporamenti. Tieni traccia di ogni indice vettoriale singolarmente e come serie temporale. Se il valore del 99° percentile raddoppia rispetto al minimo storico per un determinato indice, valuta la possibilità di ricreare l'indice.
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;
Output della query
| 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 |
Conservazione dei dati
La tabella di sistema SPANNER_SYS.VECTOR_INDEX_METRICS_HISTORY conserva i dati
relativi ai 30 giorni precedenti.
Passaggi successivi
- Scopri come ricostruire un indice vettoriale.