Metriche dell'indice vettoriale

Select a documentation version:

Questa pagina elenca le metriche relative agli indici vettoriali che generi in AlloyDB Omni. Puoi visualizzare queste metriche utilizzando la visualizzazione pg_stat_ann_indexes disponibile quando installi l'estensione alloydb_scann.

Per ulteriori informazioni sulla visualizzazione delle metriche, consulta Visualizzare le metriche degli indici vettoriali.

Metriche di usabilità

Le metriche di usabilità includono metriche che ti aiutano a comprendere lo stato di utilizzo dell'indice, ad esempio la configurazione dell'indice e il numero di scansioni dell'indice.

Nome metrica Tipo di dati Descrizione
relid OID Identificatore univoco della tabella che contiene l'indice vettoriale
indexrelid OID Identificatore univoco dell'indice vettoriale
schemaname NAME Nome dello schema proprietario dell'indice
relname NAME Nome della tabella che contiene l'indice
indexrelname NAME Nome dell'indice
indextype NAME Tipo di indice. Questo valore è sempre impostato su scann
indexconfig TEXT[] Configurazione, ad esempio conteggio delle foglie e quantizzatore, definita per l'indice al momento della creazione
indexsize TEXT Dimensione dell'indice
indexscan BIGINT Numero di scansioni dell'indice avviate sull'indice
partitioncount BIGINT Numero di partizioni (nodi foglia) nell'albero.

Metriche di ottimizzazione

Le metriche di ottimizzazione forniscono informazioni sull'ottimizzazione corrente dell'indice, consentendoti di applicare i suggerimenti per migliorare le prestazioni delle query.

Nome metrica Tipo di dati Descrizione
insertcount BIGINT Numero di operazioni di inserimento sull'indice. Questa metrica include anche il numero di righe esistenti prima della creazione dell'indice.
updatecount BIGINT Numero di operazioni di aggiornamento sull'indice. Questa metrica non tiene conto degli aggiornamenti HOT.
deletecount BIGINT Numero di operazioni di eliminazione sull'indice.
distribution JSONB Distribuzioni vettoriali in tutte le partizioni dell'indice.

I seguenti campi mostrano la distribuzione:
  • maximum (INT8): numero massimo di vettori in tutte le partizioni.
  • minimum (INT8): numero minimo di vettori in tutte le partizioni.
  • average (FLOAT) : numero medio di vettori in tutte le partizioni.
  • outliers (INT8[]): valori anomali principali in tutte le partizioni. Questo valore mostra i 20 valori anomali principali.

Nota: a causa delle caratteristiche intrinseche dell'algoritmo di clustering K-means, ci sarà sempre un certo grado di varianza nella distribuzione dei vettori tra le partizioni, anche quando l'indice viene creato inizialmente.
distributionpercentile JSONB La distribuzione dell'indice vettoriale ti aiuta a comprendere la distribuzione dei vettori tra le partizioni dell'indice ScaNN. Le partizioni vengono create in base al valore num_leaves definito durante la creazione dell'indice.

La distribuzione dell'indice vettoriale contiene bucket per i percentili 10, 25, 50, 75, 90, 95, 99 e 100. Ogni bucket contiene i seguenti valori:
  • Numero di vettori presenti nella partizione al percentile specificato.
  • Numero di partizioni che contengono vettori nell'intervallo definito dai percentili corrente e precedente.

Nota: a causa delle caratteristiche intrinseche dell'algoritmo di clustering K-means, ci sarà sempre un certo grado di varianza nella distribuzione dei vettori tra le partizioni, anche quando l'indice viene creato inizialmente.

Suggerimento di ottimizzazione basato sulle metriche

Mutazione
Le metriche insertcount, updatecount, e deletecount mostrano insieme le modifiche o le mutazioni del vettore per l'indice.
L'indice viene creato con un numero specifico di vettori e partizioni. Quando vengono eseguite operazioni come inserimento, aggiornamento o eliminazione sull'indice vettoriale, queste influiscono solo sul set iniziale di partizioni in cui risiedono i vettori. Di conseguenza, il numero di vettori in ogni partizione varia nel tempo, il che può influire sul richiamo, sul QPS o su entrambi.
Se nel tempo riscontri problemi di lentezza o accuratezza nelle query di ricerca ANN, ad esempio QPS basso o richiamo insufficiente, valuta la possibilità di esaminare queste metriche. Un numero elevato di mutazioni rispetto al numero totale di vettori potrebbe indicare la necessità di ricreare l'indice.
Distribuzione
La metrica distribution mostra le distribuzioni vettoriali in tutte le partizioni.
Quando crei un indice, questo viene creato con un numero specifico di vettori e partizioni fisse. Il processo di partizionamento e la distribuzione successiva si basano su questa considerazione. Se vengono aggiunti altri vettori, questi vengono partizionati tra le partizioni esistenti, con una distribuzione diversa rispetto a quella al momento della creazione dell'indice. Poiché la distribuzione finale non considera tutti i vettori contemporaneamente, il richiamo, il QPS o entrambi potrebbero essere interessati.
Se noti un calo graduale del rendimento delle query di ricerca ANN, ad esempio tempi di risposta più lenti o una riduzione dell'accuratezza dei risultati (misurata in QPS o richiamo), valuta la possibilità di controllare questa metrica e di ricreare l'indice.
Percentile di distribuzione
La metrica distributionpercentile è una distribuzione dell'indice vettoriale nella visualizzazione pg_stat_ann_indexes che ti aiuta a comprendere la distribuzione dei vettori tra le partizioni dell'indice ScaNN. Le partizioni vengono create in base al valore num_leaves definito durante la creazione dell'indice.
Quando crei un indice alloydb_scann sul set iniziale di righe impostando num_leaves, l'indice può modificare la distribuzione dei vettori tra le partizioni a causa delle operazioni sui dati (mutazioni di distorsione) oppure il numero di vettori potrebbe aumentare in modo significativo. Queste modifiche possono comportare un peggioramento del QPS, del richiamo o di entrambi. La distribuzione dell'indice vettoriale può fornirti indicatori se la mutazione causa una modifica della distribuzione dell'indice. Queste informazioni possono aiutarti a determinare se è necessario ricreare l'indice o se una modifica delle configurazioni del tempo di ricerca può contribuire a migliorare il rendimento delle query.
In un indice vettoriale, la distribuzione dei vettori tra le partizioni è raramente perfettamente uniforme. Questo squilibrio è chiamato distribuzione non uniforme. Un certo grado di non uniformità è spesso previsto e non significa che devi ricreare l'indice. Una distribuzione non uniforme presenta le seguenti caratteristiche:
  • La varianza del numero di vettori è bassa. La varianza può essere calcolata come
    $(P100(num\_vectors) - p10(num\_vectors))*(\frac{num\_leaves}{total\_num\_row})$
  • Il numero di partizioni con 0 vettori è basso e potrebbe essere inferiore al 30% delle partizioni.
  • La varianza del numero di partizioni è bassa.
    $ variance _{p} = abs(p_{num\_partitions} - num\_leaves * (p_{percentile} - p-1_{percentile})) $ dove "p" è un bucket di distribuzione dell'indice vettoriale.
  • Il numero di vettori in qualsiasi percentile è
    $< 8 x (\frac{num\_rows\ during\ index\ creation\ time}{ num\_leaves})$

    Se queste condizioni non sono soddisfatte, potrebbe essere necessario REINDEX a seconda dell'impatto su QPS e richiamo.
I seguenti scenari, sebbene meno comuni della distribuzione non uniforme, possono verificarsi:
  • Indice uniforme approssimativo: quando la maggior parte delle partizioni ha lo stesso numero di vettori diversi da zero e la varianza del numero di vettori è bassa, si tratta di un indice uniforme approssimativo. REINDEX è obbligatorio se il numero di vettori in ogni partizione è $> 8 * average vector$ in index_creation_time.
  • Indice sparso: si verifica anche un indice sparso quando > 50% delle partizioni sono vuote. Ad esempio, viene creato un indice sparso quando si verificano più eliminazioni in una tabella. In questo scenario, i vettori vengono concentrati in un numero ridotto di partizioni, il che aumenta il numero di vettori in ogni partizione. In questo caso, elimina l'indice e ricrealo.