Informazioni sul filtro adattivo in AlloyDB AI

Questa pagina fornisce una panoramica concettuale del filtro adattivo in AlloyDB AI, una funzionalità progettata per ottimizzare le ricerche vettoriali filtrate.

Che cos'è il filtraggio adattivo?

Il filtro adattivo analizza i pattern di query e le distribuzioni dei dati durante l'esecuzione della query per scegliere dinamicamente la strategia di filtraggio più efficiente, ad esempio il filtraggio in linea o preliminare.

Lo strumento di ottimizzazione delle query di AlloyDB AI utilizza l'analisi basata sui costi per determinare se il filtro in linea o il pre-filtraggio offrono le prestazioni migliori in un determinato momento durante l'esecuzione della query.

Questo tipo di ottimizzazione supporta le ricerche vettoriali filtrate di AlloyDB AI, in cui il filtro adattivo passa automaticamente dall'utilizzo dell'indice vettoriale a quello dei metadati, producendo risultati efficienti e accurati senza intervento manuale.

Passaggio dinamico da una strategia di filtraggio all'altra

Il filtro adattivo passa automaticamente e dinamicamente dalle strategie di filtro in linea a quelle di prefiltraggio durante l'esecuzione delle query in base ai pattern di query e alle distribuzioni dei dati in tempo reale. L'ottimizzatore di query AlloyDB AI utilizza l'analisi basata sui costi per determinare quale strategia offre il miglior rendimento in un determinato momento.

Dall'inline al pre-filtro

Quando l'ottimizzatore determina che il pre-filtraggio è più efficiente, il filtro adattivo attiva il passaggio dal filtro in linea al pre-filtraggio durante l'esecuzione. Il piano di query cambia in modo dinamico per riflettere questa modifica.

Ad esempio, il piano può mostrare Bitmap assisted pre-filtering nel campo Strategia di esecuzione quando l'ottimizzatore determina che il pre-filtraggio è più efficiente in quel punto della query. Questa modifica dinamica si verifica man mano che il sistema si adatta ai dati effettivi che incontra durante l'esecuzione della query.

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted pre-filtering
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

Quando si utilizza Execution Strategy: Bitmap assisted pre-filtering, un Bitmap Index Scan separato filtra prima un set di dati di grandi dimensioni. Se questo pre-filtraggio restringe efficacemente i candidati, l'indice vettoriale non viene utilizzato per la ricerca finale di similarità vettoriale.

Dal pre-filtro al filtro in linea

Il filtro adattivo può anche passare dinamicamente dal pre-filtraggio al filtraggio in linea se l'ottimizzatore di query AlloyDB AI determina che il filtraggio in linea è più efficiente per le caratteristiche della query corrente.

In questi casi, il piano di query viene modificato in modo dinamico per riflettere un'elaborazione più diretta dei dati vettoriali senza una fase di pre-filtraggio esplicita precedente alla scansione vettoriale. Questa adattabilità consente di ottenere prestazioni ottimali man mano che le distribuzioni dei dati o parametri di ricerca cambiano durante l'esecuzione.

Ad esempio, il piano di query mostra vector scan nel campo Strategia di esecuzione quando l'ottimizzatore determina che una strategia di filtro in linea è più efficiente per la query specificata.

Limit (actual rows=10 loops=1)
  ->  Custom Scan (vector scan) on t1 (actual rows=10 loops=1)
        Execution Strategy: Bitmap assisted vector Scan on scann_idx
        Order By: (vec_col <=> '[...]'::vector)
        Limit: 10
        Num Requalifications: 0
        Num filtered: 1000
        ->  Bitmap Index Scan on btree_idx (actual rows=10000 loops=1)
              Index Cond: (int_col <= 100000000)

In questo esempio, Execution Strategy mostra Bitmap assisted vector Scan on scann_idx, con un Bitmap Index Scan sottostante su btree_idx. Ciò indica che la ricerca vettoriale utilizza un filtro bitmap, che la scansione dell'indice bitmap genera in base alla condizione int_col <= 100000000. Custom Scan (vector scan) elabora quindi solo le righe identificate da questa bitmap, integrando il filtro direttamente nel processo di scansione vettoriale.

Passaggi successivi