Visão geral da pré-busca de índice

O AlloyDB para PostgreSQL usa a pré-busca de índice para acelerar as consultas que leem um intervalo de linhas por um índice de árvore B. A pré-busca de índice é ativada por padrão em instâncias do AlloyDB e do AlloyDB Omni que executam o PostgreSQL 17 e versões mais recentes. Não é necessário definir sinalizações, recriar índices ou mudar o aplicativo ou as consultas SQL para se beneficiar dele.

Como funciona a pré-busca de índice

Quando uma consulta verifica um intervalo de valores por um índice, por exemplo, um predicado BETWEEN ou uma cláusula ORDER BY ... LIMIT em uma coluna indexada, a verificação lê as páginas de índice e as páginas de tabela para as quais os registros de index apontam. Essas páginas de tabela geralmente ficam espalhadas pelo armazenamento. No PostgreSQL padrão, a verificação lê essas páginas uma por uma. Portanto, quando as páginas ainda não estão na memória, a consulta passa a maior parte do tempo aguardando a E/S de armazenamento.

Com a pré-busca de índice, o AlloyDB analisa a verificação em execução no índice e na tabela e lê as páginas que a verificação vai precisar em paralelo. O AlloyDB prepara as páginas pré-buscadas no cache SSD local da instância. Assim, quando a verificação solicita uma página, ela é disponibilizada pelo armazenamento local rápido, em vez do armazenamento remoto. As páginas pré-buscadas são preparadas fora dos buffers compartilhados do PostgreSQL. Assim, a pré-busca não reduz o cache de buffer disponível para outras sessões.

A pré-busca de índice inclui as seguintes proteções para não adicionar sobrecarga a consultas que não podem se beneficiar dela:

  • A pré-busca é interrompida no limite de uma cláusula LIMIT, de modo que a verificação não leia páginas além das linhas retornadas pela consulta.
  • Para verificações somente de índice em índices de cobertura, o AlloyDB pré-busca apenas páginas de índice e não lê páginas de tabela.
  • As consultas que retornam uma única linha, como pesquisas de chave primária, não acionam a pré-busca.

Benefícios para cargas de trabalho

A pré-busca de índice é mais útil quando o conjunto de trabalho é maior que a memória da instância e as consultas leem muitas linhas por um índice de árvore B. Veja a seguir exemplos de consultas que se beneficiam:

  • Consultas de intervalo em colunas numéricas, de data ou de carimbo de data/hora indexadas, como relatórios em uma janela de tempo.
  • Consultas que retornam muitas linhas para uma chave, como o histórico de pedidos de um cliente.
  • Mesclagens em que o lado interno é uma verificação de índice que retorna muitas linhas.
  • Consultas analíticas que leem grandes intervalos de tabelas orientadas por linha.

As consultas com dados que já estão em buffers compartilhados e as pesquisas de linha única têm o mesmo desempenho com ou sem pré-busca.

Pré-busca em planos de execução

Para ver o efeito da pré-busca de índice em uma consulta, execute-a com EXPLAIN (ANALYZE, BUFFERS). As páginas que a pré-busca carrega no cache do SSD local aparecem como contagens de ultra fast cache hit nos nós de verificação de índice do plano. Para mais informações sobre como ler esses contadores, consulte Receber e analisar planos de execução.

A seguir