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:
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:
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, edeletecountmostrano 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
distributionmostra 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 visualizzazionepg_stat_ann_indexesche ti aiuta a comprendere la distribuzione dei vettori tra le partizioni dell'indice ScaNN. Le partizioni vengono create in base al valorenum_leavesdefinito durante la creazione dell'indice. - Quando crei un indice
alloydb_scannsul set iniziale di righe impostandonum_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 necessarioREINDEXa seconda dell'impatto su QPS e richiamo.
- La varianza del numero di vettori è bassa. La varianza può essere calcolata come
- 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$ inindex_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.
- 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.