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
vectorealloydb_scannnon sono installate, installale.CREATE EXTENSION IF NOT EXISTS vector; CREATE EXTENSION IF NOT EXISTS alloydb_scann;Se le estensioni
vectorealloydb_scannsono 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 dativectorche vuoi indicizzare.DISTANCE_FUNCTION_NAME: funzione di distanza da utilizzare con questo indice. Scegli una delle opzioni seguenti:Distanza L2:
l2Prodotto scalare:
dot_productDistanza 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 diauto_maintenance, quandomodeè impostato suAUTO, èon.MANUAL: gestisci e ottimizza manualmente l'indice ScaNN. Il valore predefinito diauto_maintenance, quandomodeè impostato suMANUAL, è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 tra3e1048576. Per ulteriori informazioni su come decidere questo valore, vedi Ottimizzare un indiceScaNN.
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 suon. Per disattivare, imposta il valore suoff.
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
- Crea un indice ScaNN
- Metriche dell'indice vettoriale
- Ottimizzare il rendimento delle query vettoriali per ScaNN