Todos os produtos
Search
Central de documentação

PolarDB:Use Elastic Parallel Query to accelerate index creation

Última atualização: Jul 14, 2026

A construção de índices B-tree em tabelas grandes consome muito tempo com o método nativo de processo único. O Elastic Parallel Query (EPQ) paraleliza a fase de varredura do heap durante a criação do índice e reduz o tempo de construção em aproximadamente cinco vezes em tabelas extensas. Este tópico descreve o funcionamento do EPQ, os parâmetros de configuração e as etapas para criar um índice B-tree ou um índice B-tree global com o EPQ no PolarDB for PostgreSQL (Compatible with Oracle).

Como funciona

Ao construir um índice, o PolarDB for PostgreSQL (Compatible with Oracle) varre a tabela heap para coletar entradas e estrutura o B-tree a partir desses dados.

Com o EPQ ativado, o banco de dados inicia um processo coordenador de consulta (QC) que varre a tabela heap em paralelo. O processo de construção do índice recebe os resultados dessa varredura e monta a estrutura final. Essa abordagem paralela reduz significativamente o tempo de criação de índices em tabelas grandes.

Limitações

  • A criação de índices acelerada por EPQ aplica-se apenas a índices B-tree em colunas gerais. As cláusulas CONCURRENTLY e INCLUDE não têm suporte.

  • Não há suporte para índices em colunas de expressão.

Parâmetros

Configure os parâmetros a seguir para usar o EPQ na criação de índices.

Parâmetro

Padrão

Descrição

polar_px_enable_btbuild

off

Habilita a criação de índices acelerada por EPQ. Defina como on para ativar.

polar_px_dop_per_node

1

Define o grau de paralelismo (DOP) por nó. Em tabelas grandes, defina como 8 ou 16. Esse parâmetro também controla o DOP para consultas analíticas do EPQ. Para mais detalhes, consulte .

polar_px_enable_replay_wait

(padrão do banco de dados)

Garante a inclusão das entradas mais recentes da tabela no índice. Quando polar_px_enable_btbuild está definido como on, esse parâmetro é ativado automaticamente na sessão atual e retorna ao padrão do banco de dados após a criação do índice.

polar_bt_write_page_buffer_size

0

Controla a política de I/O de escrita durante a criação do índice. A unidade é bloco. O valor máximo é 8192. Para obter desempenho ideal, defina como 4096.

Comportamento de polar_bt_write_page_buffer_size:

  • 0 (padrão): Grava as entradas do índice em disco bloco a bloco conforme cada página do índice é preenchida.

  • Valor diferente de zero: Armazena as entradas do índice em um buffer do kernel com o tamanho especificado. Ao atingir a capacidade máxima, todas as entradas são gravadas em disco em uma única operação de I/O, o que reduz a sobrecarga de agendamento. Essa configuração pode diminuir o tempo de criação do índice em 20%.

Dependências entre parâmetros:

Ao definir polar_px_enable_btbuild=on, o sistema ativa automaticamente polar_px_enable_replay_wait na sessão atual. Após a conclusão da criação do índice, polar_px_enable_replay_wait retorna ao valor padrão no banco de dados.

Criar um índice B-tree com EPQ

Os passos a seguir usam uma tabela de exemplo para demonstrar como ativar o EPQ e criar um índice B-tree.

Antes de começar, certifique-se de ter:

  • Uma tabela no PolarDB for PostgreSQL (Compatible with Oracle)

Configure a tabela de exemplo

Crie uma tabela chamada test:

CREATE TABLE test(id int, id2 int);

Verifique a estrutura da tabela:

\d test

Saída esperada:

               Table "public.test"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |
 id2    | integer |           |          |

Crie um índice

  1. Ative a criação de índices acelerada por EPQ na sessão atual:

    SET polar_px_enable_btbuild = on;

    Verifique a configuração:

    SHOW polar_px_enable_btbuild;

    Saída esperada:

    polar_px_enable_btbuild
    -------------------------
     on
    (1 row)
  2. Crie o índice com a opção px_build=on:

    CREATE INDEX t ON test(id) WITH (px_build=on);

    Verifique o índice:

    \d test

    Saída esperada:

                   Table "public.test"
     Column |  Type   | Collation | Nullable | Default
    --------+---------+-----------+----------+---------
     id     | integer |           |          |
     id2    | integer |           |          |
    Indexes:
        "t" btree (id) WITH (px_build=finish)

    O campo px_build=finish na definição do índice confirma que o EPQ foi usado para construir o índice.

A opção px_build=on na instrução CREATE INDEX é obrigatória. Se polar_px_enable_btbuild estiver definido como on mas px_build=on for omitido, o PolarDB usará o método nativo de criação de índices. Nesse caso, a definição do índice não exibirá o campo px_build:
CREATE INDEX t ON test(id);
Indexes:
    "t" btree (id)

Dados de desempenho

O EPQ constrói índices B-tree em tabelas grandes aproximadamente 5 vezes mais rápido que o método nativo.

A figura a seguir compara o desempenho na criação de índices B-tree globais antes e depois da ativação do EPQ, usando um conjunto de dados de 130 GB.

Performance comparison