Gestire gli indici vettoriali

Per assicurarti che gli indici vettoriali si adattino alle modifiche che potrebbero influire sull'accuratezza dei risultati di ricerca, mantienili.

Prima di iniziare

Prima di gestire la manutenzione dell'indice, installa o aggiorna le estensioni vector e alloydb_scann:

  • Se le estensioni vector e alloydb_scann non sono installate, installale.

    CREATE EXTENSION IF NOT EXISTS vector;
    CREATE EXTENSION IF NOT EXISTS alloydb_scann;
    
  • Se le estensioni vector e alloydb_scann sono già installate, aggiornale.

    ALTER EXTENSION vector UPDATE;
    ALTER EXTENSION alloydb_scann UPDATE;
    

Mantenere gli indici automaticamente

Puoi lasciare che AlloyDB gestisca automaticamente gli indici vettoriali. Man mano che il set di dati cresce, AlloyDB analizza e aggiorna i centroidi e suddivide le partizioni outlier di grandi dimensioni. Migliora automaticamente le query al secondo (QPS) e la qualità dei risultati di ricerca. Tutti gli aggiornamenti automatici sono permanenti fino alla successiva esecuzione della manutenzione.

Per impostazione predefinita, AlloyDB abilita la manutenzione automatica degli indici per gli indici ScaNN ottimizzati automaticamente. Se vuoi creare indici ScaNN ottimizzati automaticamente, ma disattivare la manutenzione automatica, consulta Disattivare la manutenzione automatica per gli indici automatici.

Per abilitare la manutenzione automatica per gli indici creati manualmente, consulta Abilitare la manutenzione automatica durante la creazione dell'indice.

Attivare la manutenzione automatica durante la creazione dell'indice

Per attivare la manutenzione automatica durante la creazione dell'indice, imposta il parametro auto_maintenance su on. Ad esempio, vedi il seguente comando che crea un indice vettoriale ScaNN.

CREATE INDEX INDEX_NAME ON TABLE_NAME \
USING scann (EMBEDDING_COLUMN_NAME DISTANCE_FUNCTION_NAME) \
WITH (mode='INDEX_MODE', num_leaves=NUM_PARTITIONS, auto_maintenance=on);

Sostituisci le seguenti variabili:

  • 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_NAME: la tabella a cui vuoi aggiungere l'indice.

  • EMBEDDING_COLUMN_NAME: colonna che memorizza i dati vector che vuoi indicizzare.

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

    • Distanza L2: l2

    • Prodotto scalare: dot_product

    • Distanza coseno: cosine

  • INDEX_MODE: modalità per creare l'indice ScaNN. I valori disponibili sono:

    • AUTO: AlloyDB gestisce e ottimizza automaticamente la struttura dell'indice. Il valore predefinito di auto_maintenance, quando mode è impostato su AUTO, è on.

    • MANUAL: gestisci e ottimizza manualmente l'indice ScaNN. Il valore predefinito di auto_maintenance, quando mode è impostato su MANUAL, è off.

    Per saperne di più sulla modalità di indice da utilizzare, consulta Crea un indice ScaNN.

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

Configurare la manutenzione automatica per gli indici esistenti

Per configurare la manutenzione automatica per gli indici manuali esistenti, esegui questo comando:

ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);

Sostituisci le seguenti variabili:

  • INDEX_NAME: il nome dell'indice che vuoi modificare. Ad esempio, my_scann_index.

  • AUTOMATIC_MAINTENANCE: attiva o disattiva la manutenzione automatica. Per attivare, imposta il valore su on. Per disattivare, imposta il valore su off.

Aumentare la velocità effettiva della manutenzione automatica

Per aumentare la velocità effettiva della manutenzione automatica, configura il flag del database scann.max_background_workers. L'aumento del numero di worker in background aumenta il numero di indici elaborati per unità di tempo. Non riduce il tempo di elaborazione per i singoli indici. Questo valore deve essere inferiore al valore max_worker_processes impostato per il cluster di database.

Per saperne di più sulla configurazione dei flag di database, vedi Configurare i flag di database di un'istanza.

Aumentare il ritardo della manutenzione automatica

Per aumentare il ritardo tra le esecuzioni della manutenzione automatica, configura il flag di database scann.maintenance_background_naptime_s.

Per saperne di più sulla configurazione dei flag di database, vedi Configurare i flag di database di un'istanza.

Percentuale di partizioni di ricerca

Man mano che il numero di partizioni aumenta a causa della suddivisione automatica delle partizioni outlier di grandi dimensioni da parte di AlloyDB, ti consigliamo di modificare il numero di foglie che cerchi per mantenere un rendimento ottimale. Per gestire automaticamente questo numero, configura il parametro scann.pct_leaves_to_search.

scann.pct_leaves_to_search rappresenta la percentuale di partizioni correnti da cercare. Puoi impostare questo parametro su qualsiasi valore compreso tra 0 e 100. Il valore predefinito è 0, che disattiva questo parametro e utilizza il valore impostato in scann.num_leaves_to_search. Se scann.num_leaves_to_search è impostato anche su 0, allora AlloyDB utilizza per impostazione predefinita 1% di foglie.

Se prevedi che il set di dati aumenterà in modo significativo, imposta il valore iniziale su 1.

Per impostare scann.pct_leaves_to_search, esegui questo comando:

ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;

Sostituisci le seguenti variabili:

  • DB_NAME: il nome del database.
  • PERCENTAGE_PARTITIONS_TO_SEARCH: percentuale di partizioni da cercare.

Richiamare manualmente la manutenzione dell'indice

Se vuoi richiamare manualmente la manutenzione di un indice specifico, esegui questo comando:

SELECT scann_index_maintenance('INDEX_NAME');

Sostituisci INDEX_NAME con il nome dell'indice su cui vuoi richiamare la manutenzione. Ad esempio, my_scann_index.

Disabilita la manutenzione automatica per gli indici automatici

Per disattivare la manutenzione automatica per gli indici ScaNN ottimizzati automaticamente, imposta il parametro auto_maintenance su OFF durante la creazione dell'indice. Ad esempio, vedi il seguente comando che crea un indice ScaNN ottimizzato automaticamente:

CREATE INDEX similarity_index ON products
       USING scann (description_embedding cosine)
WITH (MODE = 'AUTOMATIC', auto_maintenance = 'OFF');

Se vuoi disattivare la manutenzione automatica su un indice ScaNN esistente ottimizzato automaticamente, consulta la sezione Configurare la manutenzione automatica per gli indici esistenti.

Ricostruire manualmente l'indice

Se la tua tabella è soggetta a aggiornamenti o inserimenti frequenti, ti consigliamo di ricompilare periodicamente l'indice ScaNN per migliorare la precisione del recupero. Per maggiori informazioni sulla visualizzazione delle modifiche nelle distribuzioni dei vettori o nelle mutazioni dopo la creazione dell'indice, consulta Visualizzare le metriche dell'indice vettoriale.

Per ricompilare manualmente l'indice utilizzando le configurazioni originali, esegui il seguente comando:

REINDEX INDEX CONCURRENTLY INDEX_NAME;

Sostituisci INDEX_NAME con il nome dell'indice che vuoi ricompilare. Ad esempio, my_scann_index.

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

Passaggi successivi