Statistiche dell'indice vettoriale

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:

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:

SELECT NUM_ZERO_SIZE_CLUSTERS_SAMPLED / NUM_CLUSTERS_SAMPLED AS ESTIMATED_PERCENT_OF_CLUSTERS_WITH_SIZE_ZERO

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