A criação de índices B-tree em tabelas grandes pode consumir muito tempo, bloquear janelas de manutenção e atrasar migrações de esquema. O Elastic Parallel Query (EPQ) paraleliza a varredura da tabela heap durante a criação do índice e reduz o tempo de construção para aproximadamente um quinto do método serial nativo.
Como funciona
Sem o EPQ, o PolarDB for PostgreSQL (Compatible with Oracle) varre a tabela heap sequencialmente para construir as entradas do índice e monta a estrutura B-tree a partir dessas entradas.
Com o EPQ ativado, um processo coordenador de consulta (QC) distribui a varredura da heap entre workers paralelos. Cada worker varre uma partição da tabela e encaminha os resultados ao processo de criação do índice, que monta a B-tree final.
Limitações
|
Limitação |
Detalhes |
|
Tipos de coluna |
O EPQ acelera a criação de índices apenas em colunas gerais. Não há suporte para colunas de expressão. |
|
Sintaxe |
As opções |
Parâmetros
Configure os parâmetros a seguir antes de criar índices com o EPQ.
|
Parâmetro |
Padrão |
Recomendado |
Descrição |
|
|
|
|
Ativa a criação de índices acelerada por EPQ. |
|
|
|
|
Grau de paralelismo (DOP) por nó. Controla também o DOP para . |
|
|
(automático) |
— |
Ativado automaticamente na sessão atual quando |
|
|
|
|
Controla o comportamento de E/S de gravação durante a criação do índice. Unidade: bloco. Máximo: 8192. Defina este valor como |
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 e as grava todas de uma vez quando o buffer está cheio. Isso reduz a sobrecarga frequente de agendamento de E/S.
Crie um índice B-tree com EPQ
Pré-requisitos
Antes de começar, verifique se você possui:
Um cluster PolarDB for PostgreSQL (Compatible with Oracle).
Permissão para executar instruções DDL na tabela de destino.
Procedimento
O exemplo a seguir cria uma tabela chamada test e constrói um índice usando o EPQ.
1. Crie a tabela de teste.
CREATE TABLE test(id int, id2 int);
Verifique o esquema da tabela:
\d test
Saída esperada:
Table "public.test"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
id | integer | | |
id2 | integer | | |
2. Ative a criação de índices acelerada por EPQ.
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)
3. Crie o índice.
Adicione WITH (px_build=on) à instrução CREATE INDEX para usar o EPQ nesta construção:
CREATE INDEX t ON test(id) WITH(px_build=on);
Apenas definapolar_px_enable_btbuild=onnão ativa o EPQ para uma construção de índice específica. Inclua obrigatoriamenteWITH (px_build=on)na instruçãoCREATE INDEX. Sem isso, o PolarDB usa o método nativo (serial) de criação de índice, e o índice resultante não exibirá a anotaçãopx_build.
4. Verifique se o índice foi criado com EPQ.
\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) confirma o uso do EPQ.
Dados de desempenho
O EPQ cria índices para tabelas grandes aproximadamente cinco vezes mais rápido que o método nativo.
A figura a seguir compara o desempenho global de criação de índices antes e depois de ativar o EPQ, utilizando 130 GB de dados.
