Entenda a filtragem adaptativa na IA do AlloyDB

Nesta página, você encontra uma visão geral conceitual da filtragem adaptativa na AlloyDB AI, um recurso projetado para otimizar pesquisas vetoriais filtradas.

O que é a filtragem adaptativa?

A filtragem adaptativa analisa padrões de consulta e distribuições de dados durante a execução da consulta para escolher dinamicamente a estratégia de filtragem mais eficiente, como filtragem inline ou pré-filtragem.

O otimizador de consultas da IA do AlloyDB usa a análise baseada em custos para determinar se a filtragem inline ou a pré-filtragem oferece o melhor desempenho em qualquer ponto durante a execução da consulta.

Esse tipo de otimização é compatível com as pesquisas vetoriais filtradas da IA do AlloyDB, em que a filtragem adaptativa alterna automaticamente entre o uso de vetores e índices de metadados, o que produz resultados eficientes e precisos sem intervenção manual.

Alternância dinâmica entre estratégias de filtragem

A filtragem adaptativa muda automaticamente e de forma dinâmica entre as estratégias de filtragem inline e pré-filtragem durante a execução da consulta com base em padrões de consulta e distribuições de dados em tempo real. O otimizador de consultas da IA do AlloyDB usa a análise baseada em custos para determinar qual estratégia oferece o melhor desempenho em qualquer ponto.

Do inline ao pré-filtro

Quando o otimizador determina que a pré-filtragem é mais eficiente, a filtragem adaptativa aciona uma mudança da filtragem inline para a pré-filtragem durante a execução. O plano de consulta muda dinamicamente para refletir isso.

Por exemplo, o plano pode mostrar Bitmap assisted pre-filtering no campo Estratégia de Execução quando o otimizador determina que a pré-filtragem é mais eficiente naquele ponto da consulta. Essa alteração dinâmica ocorre à medida que o sistema se adapta aos dados reais encontrados durante a execução da consulta.

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)

Ao usar Execution Strategy: Bitmap assisted pre-filtering, um Bitmap Index Scan separado primeiro filtra um grande conjunto de dados. Se essa pré-filtragem reduzir os candidatos de forma eficaz, o índice de vetor não será usado na pesquisa final de similaridade de vetor.

Da pré-filtragem à filtragem inline

A filtragem adaptativa também pode mudar dinamicamente da pré-filtragem para a filtragem inline se o otimizador de consultas da IA do AlloyDB determinar que a filtragem inline é mais eficiente para as características da consulta atual.

Nesses casos, o plano de consulta se ajusta dinamicamente para refletir um processamento mais direto dos dados de vetor sem uma etapa explícita de pré-filtragem antes da verificação do vetor. Essa adaptabilidade ajuda a alcançar o desempenho ideal à medida que as distribuições de dados ou os parâmetros de consulta mudam durante a execução.

Por exemplo, o plano de consulta mostra vector scan no campo Estratégia de execução quando o otimizador determina que uma estratégia de filtragem inline é mais eficiente para a consulta em questão.

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)

Neste exemplo, o Execution Strategy mostra Bitmap assisted vector Scan on scann_idx, com um Bitmap Index Scan subjacente em btree_idx. Isso indica que a pesquisa de vetor usa um filtro de bitmap, que a verificação de índice de bitmap gera com base na condição int_col <= 100000000. Em seguida, o Custom Scan (vector scan) processa apenas as linhas identificadas por esse bitmap, integrando a filtragem diretamente ao processo de verificação de vetor.

A seguir