Entenda a filtragem adaptativa na IA do AlloyDB

Esta página oferece uma visão geral conceitual da filtragem adaptativa no AlloyDB AI, um recurso projetado para otimizar pesquisas vetoriais filtradas.

O que é 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 do AlloyDB AI 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 oferece suporte às pesquisas vetoriais filtradas do AlloyDB AI, 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 alterna automaticamente e dinamicamente 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 do AlloyDB AI usa a análise baseada em custos para determinar qual estratégia oferece o melhor desempenho em qualquer ponto.

Da filtragem inline para a pré-filtragem

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, uma Bitmap Index Scan separada filtra primeiro um grande conjunto de dados. Se essa pré-filtragem reduzir efetivamente os candidatos, o índice de vetor não será usado para a pesquisa final de similaridade de vetor.

Da pré-filtragem para a filtragem inline

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

Nesses casos, o plano de consulta é ajustado dinamicamente para refletir um tratamento mais direto dos dados vetoriais sem uma etapa explícita de pré-filtragem que anteceda a verificação de vetor. Essa adaptabilidade ajuda a alcançar a performance 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, a Execution Strategy mostra Bitmap assisted vector Scan on scann_idx, com uma Bitmap Index Scan subjacente em btree_idx. Isso indica que a pesquisa vetorial usa um filtro de bitmap, que a verificação de índice de bitmap gera com base na condição int_col <= 100000000. A Custom Scan (vector scan) processa apenas as linhas identificadas por esse bitmap, integrando a filtragem diretamente ao processo de verificação de vetor.

Exemplo: como a seletividade aciona uma mudança dinâmica

A filtragem adaptativa baseia as decisões na seletividade dos filtros padrão. Se um filtro eliminar uma grande quantidade de dados, o otimizador provavelmente vai escolher a pré-filtragem. Se o filtro deixar a maior parte dos dados intacta, o otimizador provavelmente vai escolher a filtragem inline.

É possível observar essa mudança dinâmica em tempo real executando a mesma consulta e ajustando a seletividade da cláusula WHERE.

Por exemplo, ao consultar uma tabela grande de produtos de varejo, talvez você queira realizar uma pesquisa vetorial apenas em itens com um preço específico.

Baixa seletividade

Primeiro, você pesquisa produtos com preço abaixo de US $1.000. Como quase todos os produtos no banco de dados custam menos de US $1.000, o filtro tem baixa seletividade. O otimizador de consultas do AlloyDB AI determina que reunir quase todo o banco de dados em uma lista pré-filtrada é ineficiente. Portanto, ele realiza uma verificação de vetor inline.

Se você analisar o plano de consulta, vai notar que o sistema se adaptou dinamicamente ao conjunto de dados enorme e escolheu a filtragem inline.

  Limit (actual rows=10)
    -> Custom Scan (vector scan)
    Execution Strategy: Bitmap assisted vector Scan on scann_idx
    Order By: (vec <=> '[...]'::vector)
    -> Bitmap Index Scan
       Index Cond: (price <= 1000)

Alta seletividade

Em seguida, você muda a consulta para pesquisar produtos com preço abaixo de US $10. À medida que a consulta começa a ser executada, o otimizador de consultas do AlloyDB AI se prepara inicialmente para usar a filtragem inline. O planejador assume incorretamente que o filtro não é muito seletivo. Isso acontece com mais frequência do que o esperado porque as estatísticas usadas para fazer essas estimativas nem sempre são precisas ou atualizadas. No entanto, ele determina rapidamente que o filtro de preço tem alta seletividade: muito poucos itens no banco de dados têm esse preço baixo. O otimizador determina que reunir essas poucas linhas antes de realizar a verificação de vetor é muito mais rápido. Portanto, ele muda dinamicamente as estratégias para a pré-filtragem.

O plano de consulta reflete essa mudança em tempo real. O sistema escolheu pré-filtrar o pequeno conjunto de dados antes de verificar os vetores.

Escolha inicial do planejador

Limit (actual rows=10)
  -> Custom Scan (vector scan)
     Execution Strategy: Bitmap assisted vector Scan on scann_idx
     Order By: (vec <=> '[...]'::vector)
     -> Bitmap Index Scan
        Index Cond: (price <= 10)

Execução real (mudança adaptativa)

Limit (actual rows=10)
  -> Custom Scan (vector scan)
     Execution Strategy: Bitmap assisted pre-filtering
     Order By: (vec <=> '[...]'::vector)
     -> Bitmap Index Scan
        Index Cond: (price <= 10)

Não é necessário reescrever o código do aplicativo ou atualizar manualmente os índices do banco de dados à medida que a distribuição de dados muda ao longo do tempo. O AlloyDB AI processa a lógica de roteamento para você em todas as consultas, garantindo alta performance.

A seguir