Todos os produtos
Search
Central de documentação

PolarDB:DDL paralelo

Última atualização: Sep 08, 2026

O DDL paralelo acelera a criação de índices em tabelas grandes ao distribuir o trabalho entre várias threads, em vez de usar apenas uma. Quando há recursos de hardware disponíveis, esse recurso reduz o tempo de execução de DDL e diminui a janela em que operações subsequentes de Data Manipulation Language (DML) ficam bloqueadas.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster PolarDB for MySQL que atenda aos requisitos de versão abaixo

A criação de índice secundário exige uma das seguintes versões de cluster:

  • PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.1.7 ou posterior

  • PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.10 ou posterior

  • PolarDB for MySQL 5.7, versão de revisão 5.7.1.0.7 ou posterior

A criação de índice de chave primária exige uma das seguintes versões de cluster:

  • PolarDB for MySQL 8.0.2, versão de revisão 8.0.2.2.9 ou posterior

  • PolarDB for MySQL 8.0.1, versão de revisão 8.0.1.1.31 ou posterior

Para verificar a versão do seu cluster, consulte Query the version number.

Limitações

O DDL paralelo permite criar índices de chave primária e índices secundários. Não há suporte para:

  • Índices de texto completo

  • Índices espaciais

  • Índices secundários em colunas virtuais

Impacto nos recursos

O DDL paralelo aumenta o uso de threads, elevando o consumo de CPU, memória e I/O. Definir uma contagem alta de threads paralelas faz com que a operação utilize mais memória. Se a instância ficar sem memória, poderá ocorrer um erro de out-of-memory (OOM), afetando a estabilidade do cluster. Execute o DDL paralelo fora dos horários de pico ou quando o cluster tiver recursos de hardware suficientes para evitar impactos nas operações SQL simultâneas.

Ative o DDL paralelo

Defina a contagem de threads para criação de índice secundário

O parâmetro innodb_polar_parallel_ddl_threads controla quantas threads são executadas em paralelo para cada operação DDL.

Parâmetro

Nível

Descrição

innodb_polar_parallel_ddl_threads

Sessão

Número de threads paralelas por operação DDL. Intervalo: 1–16. Padrão: 1 (thread única). Defina qualquer valor diferente de 1 para ativar o DDL paralelo na criação de índices secundários.

Nota

Quando definido como 1, o sistema ainda usa duas threads paralelas internamente.

Exemplo:

-- Use 8 parallel threads for the current session
SET innodb_polar_parallel_ddl_threads = 8;

-- Create a secondary index using the configured thread count
ALTER TABLE t0 ADD INDEX idx_b (b);

Ative a criação paralela de índice de chave primária

O DDL paralelo para índices de chave primária requer ativação de teste adicional.

Importante

Para usar este recurso, acesse o Quota Center. Localize a cota com o Quota ID igual a polardb_mysql_pddl_for_pk e clique em Apply na coluna Actions para solicitar o teste.

Parâmetro

Nível

Descrição

innodb_parallel_build_primary_index

Global

Controla se o DDL paralelo é permitido para a criação de índices de chave primária. Valores válidos: ON (permitido), OFF (padrão, não permitido).

Otimizar a fase de ordenação

Caso o paralelismo padrão de threads não atenda aos seus requisitos de desempenho, ative a ordenação por amostra para otimizar ainda mais a fase de ordenação.

Parâmetro

Nível

Descrição

innodb_polar_use_sample_sort

Sessão

Ativa a otimização de ordenação por amostra durante a criação de índices. Valores válidos: ON, OFF (padrão).

Exemplo:

SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;

ALTER TABLE t0 ADD INDEX idx_b (b);

Otimizar a fase de carregamento

Para acelerar ainda mais a construção da árvore de índices, ative o carregamento em massa paralelo.

Parâmetro

Nível

Descrição

innodb_polar_use_parallel_bulk_load

Sessão

Ativa a otimização de carregamento em massa paralelo para a criação da árvore de índices. Valores válidos: ON, OFF (padrão).

Exemplo — todas as três otimizações ativadas:

SET innodb_polar_parallel_ddl_threads = 8;
SET innodb_polar_use_sample_sort = ON;
SET innodb_polar_use_parallel_bulk_load = ON;

ALTER TABLE t0 ADD INDEX idx_b (b);

Teste de desempenho

Ambiente de teste

  • Cluster: PolarDB for MySQL 8.0 Standard Edition, 16 núcleos, 128 GB de memória

  • Armazenamento: 50 TB

Tabela de teste

CREATE TABLE t0(
  a INT PRIMARY KEY,
  b INT) ENGINE=InnoDB;

Os dados de teste foram gerados pelo seguinte procedimento:

DELIMITER //
CREATE PROCEDURE populate_t0()
BEGIN
     DECLARE i int DEFAULT 1;
     WHILE (i <= $table_size) DO
             INSERT INTO t0 VALUES (i, 1000000 * RAND());
             SET i = i + 1;
     END WHILE;
END //
DELIMITER ;
CALL populate_t0();
Nota

Substitua $table_size pelo número de linhas, como 1000000. O teste utiliza tabelas com 1.000.000, 10.000.000, 100.000.000 e 1.000.000.000 de linhas, além de uma tabela de 1 TB gerada com Sysbench. Para obter detalhes sobre a configuração do Sysbench, consulte Test tools.

Método de teste

Cada teste mede o tempo necessário para criar um índice secundário na coluna b (tipo INT) em tabelas de tamanho crescente, com innodb_polar_parallel_ddl_threads definido como 1, 2, 4, 8, 16 e 32.

Resultados do teste

Os gráficos abaixo mostram a taxa de aceleração em relação ao DDL de thread única (contagem de threads = 1) sob três combinações de parâmetros.

Apenas paralelismo de threads (innodb_polar_parallel_ddl_threads):

Thread parallelism speedup

Paralelismo de threads + ordenação por amostra (innodb_polar_parallel_ddl_threads + innodb_polar_use_sample_sort):

Thread parallelism and sample sort speedup

Todos os três parâmetros (innodb_polar_parallel_ddl_threads + innodb_polar_use_sample_sort + innodb_polar_use_parallel_bulk_load):

All three parameters speedup

Fale conosco

Se você tiver dúvidas sobre operações DDL, Contact us.

Recursos relacionados

Em caso de dúvidas sobre operações DDL, contact technical support.