Gestire gli indici vettoriali

Questa pagina descrive le opzioni per la manutenzione degli indici vettoriali. La manutenzione degli indici contribuisce a garantire che gli indici si adattino alle modifiche dei dati che potrebbero influire sull'accuratezza dei risultati di ricerca. Utilizza le strategie in questa pagina per evitare il peggioramento delle prestazioni delle query man mano che il set di dati cresce.

Prima di iniziare

  • Installa o aggiorna le estensioni vector e alloydb_scann.

    1. Se le estensioni vector e alloydb_scann non sono installate, installa le ultime versioni delle estensioni.

      CREATE EXTENSION IF NOT EXISTS vector;
      CREATE EXTENSION IF NOT EXISTS alloydb_scann;
      
    2. Se le estensioni vector e alloydb_scann sono già installate, esegui l'upgrade all'ultima versione.

      ALTER EXTENSION vector UPDATE;
      ALTER EXTENSION alloydb_scann UPDATE;
      

Visualizzare le metriche dell'indice vettoriale

Se la tua tabella è soggetta a aggiornamenti o inserimenti frequenti, ti consigliamo di ricreare periodicamente l'indice ScaNN esistente per migliorare l'accuratezza del recupero per l'indice. Puoi monitorare le metriche dell'indice per visualizzare le modifiche nelle distribuzioni dei vettori o nelle mutazioni dei vettori dalla creazione dell'indice e poi eseguire nuovamente l'indicizzazione di conseguenza.

Per saperne di più sulle metriche, consulta Visualizzare le metriche dell'indice vettoriale.

Mantenere gli indici automaticamente

La funzionalità di manutenzione automatica degli indici consente ad AlloyDB di gestire in modo incrementale l'indice in modo che, man mano che il set di dati cresce, AlloyDB analizzi e aggiorni continuamente i centroidi e divida le partizioni outlier di grandi dimensioni. Ciò consente di mantenere l'indice per le query comparabili al secondo (QPS) e la qualità dei risultati di ricerca. Tutti gli aggiornamenti apportati dalla manutenzione automatica sono permanenti fino all'esecuzione di una manutenzione successiva.

Puoi utilizzare il flag del database scann.enable_preview_features (GUC) insieme al parametro auto_maintenance a livello di indice durante la creazione di un indice ScaNN per attivare la manutenzione automatica degli indici ScaNN.

La funzionalità di manutenzione automatica dell'indice è abilitata per impostazione predefinita per gli indici ScaNN ottimizzati automaticamente. Per gli indici creati manualmente, dopo aver attivato il flag scann.enable_preview_features, puoi impostare il parametro auto_maintenance durante la creazione dell'indice oppure utilizzare la funzione scann_index_maintenance per attivare la manutenzione automatica dell'indice on demand.

Per consentire ad AlloyDB di gestire automaticamente un indice, attiva il flag scann.enable_preview_features:

gcloud alloydb instances update INSTANCE_ID \
     --database-flags scann.enable_preview_features=on \
     --region=REGION_ID \
     --cluster=CLUSTER_ID \
     --project=PROJECT_ID

Sostituisci quanto segue:

  • INSTANCE_ID: l'ID dell'istanza.
  • REGION_ID: la regione in cui viene inserita l'istanza, ad esempio us-central1.
  • CLUSTER_ID: l'ID del cluster in cui viene inserita l'istanza.
  • PROJECT_ID: l'ID del progetto in cui si trova il cluster.

Eventuali aggiornamenti apportati all'indice a seguito della manutenzione automatica sono permanenti finché AlloyDB non aggiorna nuovamente l'indice.

Abilita la manutenzione automatica durante la creazione dell'indice

Per creare un indice ScaNN manuale con la manutenzione automatica dell'indice abilitata, esegui il seguente comando di esempio:

CREATE INDEX INDEX_NAME ON TABLE \
USING scann (EMBEDDING_COLUMN DISTANCE_FUNCTION) \
WITH (mode=MANUAL, num_leaves=NUM_LEAVES_VALUE, auto_maintenance=on);

Sostituisci quanto segue:

  • INDEX_NAME: il nome dell'indice che vuoi creare, ad esempio my-scann-index. I nomi degli indici sono condivisi nel database. Assicurati che ogni nome di indice sia univoco per ogni tabella del database.

  • TABLE: la tabella a cui aggiungere l'indice.

  • EMBEDDING_COLUMN: una colonna che memorizza i dati vector.

  • DISTANCE_FUNCTION: la funzione di distanza da utilizzare con questo indice. Scegli una delle opzioni seguenti:

    • Distanza L2: l2

    • Prodotto scalare: dot_product

    • Distanza coseno: cosine

  • NUM_LEAVES_VALUE: il numero di partizioni da applicare a questo indice. Imposta un valore compreso tra 1 e 1048576. Per ulteriori informazioni su come decidere questo valore, vedi Ottimizzare un indice ScaNN.

Puoi aumentare il throughput della manutenzione automatica degli indici in più indici configurando il flag di database scann.max_background_workers. L'aumento del numero di worker aumenta il numero di indici elaborati in un'unità di tempo; non riduce il tempo di elaborazione per un singolo indice. Facoltativamente, puoi anche impostare il flag di database scann.maintenance_background_naptime_s per controllare il ritardo minimo tra le esecuzioni della manutenzione automatica degli indici.

Configurare pct_leaves_to_search per la manutenzione automatica dell'indice

Se hai attivato la manutenzione automatica degli indici, AlloyDB divide automaticamente le partizioni in base all'euristica, ad esempio dividendo le partizioni outlier di grandi dimensioni che superano una determinata dimensione. Man mano che il numero di partizioni aumenta a causa di queste suddivisioni, devi modificare il numero di foglie da cercare per mantenere prestazioni ottimali.

Per gestire il numero di foglie da cercare automaticamente, utilizza pct_leaves_to_search. Questo parametro consente di specificare una percentuale del numero di partizioni da cercare. Se prevedi una crescita significativa del set di dati, inizia impostando il valore di pct_leaves_to_search su 1. Il parametro è disattivato per impostazione predefinita.

Imposta questo valore sulla percentuale del numero attuale di partizioni. Ad esempio, per cercare l'1% del numero attuale di partizioni, imposta questo valore su 1.

Puoi impostare questo parametro su qualsiasi valore compreso tra 0 e 100. Il valore predefinito è 0, che disattiva questo parametro e utilizza scann.num_leaves_to_search per calcolare il numero di foglie da cercare.

Per impostare il flag pct_leaves_to_search sul database, esegui questo comando:

ALTER DATABASE DATABASE_NAME SET scann.pct_leaves_to_search = PERCENTAGE_LEAVES_TO_SEARCH;

Sostituisci quanto segue:

  • DATABASE_NAME: il nome del database.
  • PERCENTAGE_LEAVES_TO_SEARCH: la percentuale di num_leaves da cercare.

Richiamare manualmente la manutenzione dell'indice

Se vuoi richiamare la manutenzione di un indice specifico on demand, esegui questo comando. Questa funzione è disponibile nella versione alloydb_scann 0.1.2 o successive.

Per utilizzare questa funzione, devi prima attivare il flag scann.enable_preview_features come descritto in Gestire automaticamente gli indici.

SELECT scann_index_maintenance('INDEX_NAME');

Ricostruire manualmente l'indice

Puoi ricompilare manualmente l'indice se vuoi ricompilarlo con le configurazioni specificate al momento della creazione.

Per ricompilare manualmente l'indice, esegui questo comando:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Sostituisci INDEX_NAME con il nome dell'indice che vuoi ricostruire, ad esempio my-scann-index. I nomi degli indici sono condivisi nel database. Assicurati che ogni nome di indice sia univoco per ogni tabella del database.

Per saperne di più sulla reindicizzazione in PostgreSQL, consulta REINDEX.

Passaggi successivi