Per assicurarti che gli indici vettoriali si adattino alle modifiche che potrebbero influire sull'accuratezza dei risultati di ricerca, esegui la manutenzione degli indici vettoriali.
Prima di iniziare
Prima di gestire la manutenzione degli indici, 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;
Eseguire automaticamente la manutenzione degli indici
Puoi consentire ad AlloyDB Omni di gestire automaticamente gli indici vettoriali. Man mano che il set di dati cresce, AlloyDB Omni analizza e aggiorna i centroidi e suddivide le partizioni di valori anomali di grandi dimensioni. In questo modo, vengono migliorate 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 Omni abilita la manutenzione automatica degli indici per gli indici ScaNN ottimizzati automaticamente. Se vuoi creare indici ScaNN ottimizzati automaticamente, ma disabilitare la manutenzione automatica, consulta Disabilitare 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.
Abilitare la manutenzione automatica durante la creazione dell'indice
Per abilitare la manutenzione automatica durante la creazione dell'indice, imposta il parametro auto_maintenance su on. Ad esempio, consulta 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: 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: 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 i seguenti:AUTO: AlloyDB Omni 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 Creare un indice ScaNN.
NUM_PARTITIONS: numero di partizioni da applicare a questo indice. Imposta questo valore su un valore compreso tra3e1048576. Per saperne di più su come decidere questo valore, consulta Ottimizzare unScaNNindice.
Configurare la manutenzione automatica per gli indici esistenti
Per configurare la manutenzione automatica per gli indici manuali esistenti, esegui il seguente comando:
ALTER INDEX INDEX_NAME SET (auto_maintenance = AUTOMATIC_MAINTENANCE);
Sostituisci le seguenti variabili:
INDEX_NAME: nome dell'indice che vuoi modificare. Ad esempio,my_scann_index.AUTOMATIC_MAINTENANCE: abilita o disabilita la manutenzione automatica. Per abilitare, imposta il valore suon. Per disabilitare, imposta il valore suoff.
Aumentare la velocità effettiva della manutenzione automatica
Per aumentare la velocità effettiva della manutenzione automatica, configura il
scann.max_background_workers
flag di database. 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
max_worker_processes
valore impostato per il cluster di database.
Per saperne di più sulla configurazione dei flag di database, consulta Configurare i parametri del database.
Aumentare il ritardo della manutenzione automatica
Per aumentare il ritardo tra le esecuzioni di manutenzione automatica, configura il
scann.maintenance_background_naptime_s
flag di database.
Per saperne di più sulla configurazione dei flag di database, consulta Configurare i parametri del database.
Percentuale di partizioni di ricerca
Man mano che il numero di partizioni aumenta a causa della suddivisione automatica delle partizioni di valori anomali di grandi dimensioni da parte di AlloyDB Omni, ti consigliamo di modificare il numero di foglie da cercare per mantenere prestazioni ottimali. 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 un valore compreso tra 0 e 100. Il
valore predefinito è 0, che disabilita questo parametro e utilizza invece il valore impostato in
scann.num_leaves_to_search. Se anche scann.num_leaves_to_search è impostato su 0, AlloyDB Omni utilizza per impostazione predefinita l'1% delle foglie.
Se prevedi una crescita significativa del set di dati, imposta il valore iniziale su 1.
Per impostare scann.pct_leaves_to_search, esegui il seguente comando:
ALTER DATABASE DB_NAME SET scann.pct_leaves_to_search = PERCENTAGE_PARTITIONS_TO_SEARCH;
Sostituisci le seguenti variabili:
DB_NAME: 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 il seguente comando:
SELECT scann_index_maintenance('INDEX_NAME');
Sostituisci INDEX_NAME con il nome dell'indice per cui vuoi richiamare la manutenzione. Ad esempio, my_scann_index.
Disabilitare la manutenzione automatica per gli indici automatici
Per disabilitare la manutenzione automatica per gli indici ScaNN ottimizzati automaticamente, imposta il parametro auto_maintenance su OFF durante la creazione dell'indice. Ad esempio, consulta 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 disabilitare la manutenzione automatica su un indice ScaNN ottimizzato automaticamente esistente, consulta Configurare la manutenzione automatica per gli indici esistenti.
Ricostruire manualmente l'indice
Se la tabella è soggetta a aggiornamenti o inserimenti frequenti, ti consigliamo di ricostruire periodicamente l'indice ScaNN per migliorarne l'accuratezza di richiamo. Per saperne di più sulla visualizzazione delle modifiche nelle distribuzioni o nelle mutazioni dei vettori dopo la creazione dell'indice, consulta Visualizzare le metriche degli indici vettoriali.
Per ricostruire 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 ricostruire. Ad esempio, my_scann_index.
Per saperne di più sulla reindicizzazione in PostgreSQL, consulta REINDEX.
Passaggi successivi
- Creare un indice ScaNN
- Metriche degli indici vettoriali
- Ottimizzare il rendimento delle query vettoriali per ScaNN