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
CONCURRENTLYeINCLUDEnã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 |
|
|
|
Habilita a criação de índices acelerada por EPQ. Defina como |
|
|
|
Define o grau de paralelismo (DOP) por nó. Em tabelas grandes, defina como |
|
|
(padrão do banco de dados) |
Garante a inclusão das entradas mais recentes da tabela no índice. Quando |
|
|
|
Controla a política de I/O de escrita durante a criação do índice. A unidade é bloco. O valor máximo é |
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
-
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) -
Crie o índice com a opção
px_build=on:CREATE INDEX t ON test(id) WITH (px_build=on);Verifique o índice:
\d testSaí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=finishna definição do índice confirma que o EPQ foi usado para construir o índice.
A opçãopx_build=onna instruçãoCREATE INDEXé obrigatória. Sepolar_px_enable_btbuildestiver definido comoonmaspx_build=onfor omitido, o PolarDB usará o método nativo de criação de índices. Nesse caso, a definição do índice não exibirá o campopx_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.
