Todos os produtos
Search
Central de documentação

PolarDB:Online DDL

Última atualização: Jun 28, 2026

Alterações de schema em bancos de dados ativos envolvem riscos: bloqueios prolongados de tabela podem paralisar sua aplicação. O Online DDL no PolarDB-X minimiza o bloqueio de tabelas para permitir a execução simultânea de operações DDL e transações DML, mantendo o banco de dados responsivo durante as mudanças de schema.

Pré-requisitos

Antes de executar operações de Online DDL, confirme os seguintes itens:

Como funciona

O PolarDB-X executa comandos DDL de duas formas, dependendo do tipo de operação.

O DDL executado fisicamente é enviado aos nós de dados. O nó de computação gerencia o encaminhamento no nível de shard, a coordenação e os metadados. Operações desta categoria — CREATE LOCAL INDEX, ALTER/ADD COLUMN e CREATE/DROP TABLE — seguem os mesmos princípios de execução online do MySQL DDL.

O DDL executado logicamente roda inteiramente nos nós de computação. Ao iniciar uma operação DDL lógica, o sistema cria uma tabela temporária, copia os dados existentes para ela e captura simultaneamente as atualizações incrementais de DML. Após a sincronização dos dados históricos e incrementais, o sistema transfere o tráfego da tabela original para a temporária sem bloqueá-la. Esta categoria inclui GLOBAL INDEX, CREATE/DROP PARTITION, CREATE/DROP PRIMARY KEY e Alterar tipos de coluna sem bloquear tabelas.

Impacto de cada tipo de DDL na carga de trabalho

Para avaliar o impacto de uma operação DDL no banco de dados, verifique três aspectos:

Bloqueio de tabela

  • O Online DDL bloqueia comandos DML apenas por alguns segundos durante a troca final de tabela. Durante a maior parte da execução, o DML roda livremente.

  • Operações DDL não online mantêm a tabela bloqueada durante todo o processo.

Preenchimento de dados (backfill)

  • Operações que alteram apenas metadados — como INSTANT ADD COLUMN e RENAME TABLE — são concluídas instantaneamente, sem necessidade de backfill.

  • Os comandos DROP TABLE e DROP INDEX modificam metadados e removem arquivos físicos rapidamente, também sem backfill.

  • Todas as demais operações DDL copiam os dados originais para novos índices clusterizados ou secundários. O tempo de execução varia conforme o volume de dados, a concorrência e as especificações da instância.

Gravação múltipla síncrona

Operações DDL executadas logicamente que exigem backfill precisam também gravar o tráfego DML concomitante na tabela temporária. Como essas gravações múltiplas utilizam transações distribuídas para garantir atomicidade, as operações DML rodam como operações lógicas nesse período, o que reduz o desempenho do DML online.

Para minimizar esse impacto, o PolarDB-X implementa gravação múltipla assíncrona para MOVE/SPLIT PARTITION, Alterar tipos de coluna sem bloquear tabelas e REBALANCE. O tráfego DML é armazenado em cache e reexecutado após a conclusão do backfill, reduzindo conflitos e encurtando a janela de degradação de desempenho.

No caso de DDL executado fisicamente com backfill de dados e sem bloqueio, a gravação múltipla assíncrona nativa ocorre automaticamente via logs online. Operações sem backfill não exigem gravação múltipla.

Referência de recursos do Online DDL

Importante

Ao usar MODIFY COLUMN ou CHANGE COLUMN, sempre especifique os atributos completos da coluna. A omissão de atributos pode causar modificações inesperadas. Execute SHOW FULL CREATE TABLE TABLE_NAME para visualizar as definições completas das colunas antes de fazer alterações.

Operações de índice

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Criar um índice secundário local (LSI)

Não

Não

Não

Sim

—

Excluir um LSI

Não

Não

Não

Não

—

Renomear um LSI

Não

Não

Não

Não

—

Criar um índice secundário global (GSI)

Sim

Não

Sim

Sim

Não

Excluir um GSI

Sim

Não

Não

Não

—

Renomear um GSI

Sim

Não

Não

Não

—

Operações de tabela

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Modificar o formato de linha (ROW_FORMAT)

Não

Não

Sim

Sim

—

OPTIMIZE TABLE

Não

Não

Sim

Sim

—

Renomear uma tabela

Não

Não

Não

Não

—

Modificar o conjunto de caracteres padrão

Não

Não

Sim

Sim

—

Converter o conjunto de caracteres

Não

Sim

Sim

Sim

—

Truncar uma tabela sem GSIs (TRUNCATE TABLE WITHOUT GSI)

Não

Não

Sim

Não

—

Truncar uma tabela com GSIs (TRUNCATE TABLE WITH GSI)

Sim

Não

Sim

Não

—

Operações de partição

Os recursos de Online DDL nesta tabela aplicam-se tanto a grupos de tabelas quanto a tabelas individuais.
Operação Executada logicamente Bloqueia a tabela Reconstrói a tabela Faz backfill de dados Gravação múltipla assíncrona
Migrar uma partição Sim Não Sim (apenas partições relevantes) Sim Sim*
Dividir uma partição Sim Não Sim (apenas partições relevantes) Sim
Mesclar partições Sim Não Sim (apenas partições relevantes) Sim Não
Adicionar uma partição Sim Não Não Não† —
Excluir uma partição Sim Não Não Não‡ —
Reorganizar partições Sim Não Sim (apenas partições relevantes) Sim Não
Limpar uma partição Sim Não Não Não —
Renomear uma partição Sim Não Não Não —
Modificar uma partição Sim Não Sim (apenas partições relevantes) Sim Não

\* Condições para gravação múltipla assíncrona na migração de partição:

  • Tabelas lógicas e GSIs com chave primária explícita ou implícita: suportado.

  • Índices secundários globalmente únicos (sem chave primária): não suportado.

† Comportamento de backfill ao adicionar uma partição:

  • Tabela RANGE ou RANGE COLUMNS sem partição MAXVALUE: backfill desnecessário. Caso contrário, ocorre backfill de dados de partições específicas.

  • Tabela LIST ou LIST COLUMNS sem partição DEFAULT: backfill desnecessário. Caso contrário, ocorre backfill de dados de partições específicas.

‡ Comportamento de backfill ao excluir uma partição:

  • Tabela RANGE ou RANGE COLUMNS: sem backfill ao excluir a última partição; backfill necessário para as demais.

  • Tabela LIST ou LIST COLUMNS sem partição DEFAULT: backfill desnecessário. Caso contrário, o backfill é obrigatório.

Operações de sequence

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Criar uma sequence

Sim

Não

Não

Não

—

Excluir uma sequence

Sim

Não

Não

Não

—

Modificar atributos da sequence

Sim

Não

Não

Não

—

Converter o tipo da sequence

Sim

Não

Não

Não

—

Operações comuns de coluna

Importante

As operações de coluna dividem-se em operações comuns (sem relação com chave primária, chaves de partição ou colunas geradas), alterações de chave primária e de partição, e operações de colunas geradas. Execute SHOW FULL CREATE TABLE TABLE_NAME para visualizar os atributos completos da coluna antes de determinar a categoria da operação.

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Adicionar uma coluna (ver Nota 1)

Não

Não

Sim

Sim

—

Excluir uma coluna

Não

Não

Sim

Sim

—

Renomear uma coluna

Não

Não

Não

Não

—

Alterar a ordem das colunas

Não

Não

Sim

Sim

—

Alterar o valor padrão de uma coluna

Não

Não

Não

Não

—

Remover o valor padrão de uma coluna

Não

Não

Não

Não

—

Modificar o tipo de dados de uma coluna

Não

Sim

Sim

Sim

—

Aumentar o comprimento de uma coluna VARCHAR (ver Nota 2 e Nota 3)

Não

Não

Não

Não

—

Aumentar o comprimento de uma coluna CHAR (ver Nota 3)

Não

Sim

Sim

Sim

—

Alterar uma coluna para NULL

Não

Não

Sim

Sim

—

Alterar uma coluna para NOT NULL*

Não

Não

Sim

Sim

—

\* Se o SQL_MODE contiver strict_trans_tables ou strict_all_tables, trata-se de uma operação online. Caso contrário, utiliza-se o algoritmo COPY, que bloqueia a tabela e copia os dados.

Nota 1 — Opções de algoritmo para adição de coluna:

Quando se especifica explicitamente ALGORITHM=INSTANT ou ALGORITHM=OMC, o comportamento muda:

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Instant ADD COLUMN

Não

Não

Não

Não

—

Alterar o tipo de coluna online

Sim

Não

Sim

Sim

Sim

Nota 2 — Extensão de VARCHAR em nós de dados 5,7 vs. 8,0:

Nós de dados 5,7 permitem aumentar o comprimento de colunas VARCHAR com o algoritmo INPLACE. Nós de dados 8,0 não oferecem esse suporte.

O overhead de armazenamento muda no limite de 256 bytes: colunas com até 255 bytes usam 1 byte para armazenar o comprimento; colunas com 256 bytes ou mais usam 2 bytes. Aumentar uma coluna VARCHAR além desse limite exige mais do que uma simples alteração de metadados.

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Aumentar comprimento de VARCHAR para mais de 256 bytes

Não

Não

Sim

Sim

—

Nota 3 — Extensão de CHAR em nós de dados 5,7 vs. 8,0:

Nós de dados 5,7 permitem aumentar o comprimento de colunas CHAR com o algoritmo INPLACE. Nós de dados 8,0 não oferecem esse suporte.

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Aumentar comprimento de coluna CHAR

Não

Não

Sim

Sim

—

Operações de chave primária e coluna de sharding

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Adicionar uma chave primária

Sim

Não

Sim

Sim

Não

Excluir a chave primária original e adicionar uma nova

Sim

Não

Sim

Sim

Não

Alterar o método de sharding, o número de shards ou as colunas de sharding

Sim

Não

Sim (GSI ou tabela primária recriada)

Sim

Não

Alterar a definição da coluna de sharding de um GSI ou tabela primária

Sim

Não

Sim (GSI ou tabela primária recriada)

Sim

Não

Operações de coluna gerada

Operação

Executada logicamente

Bloqueia a tabela

Reconstrói a tabela

Faz backfill de dados

Gravação múltipla assíncrona

Adicionar uma coluna virtual

Não

Não

Não

Não

—

Remover uma coluna virtual

Não

Não

Não

Não

—

Adicionar uma coluna armazenada

Não

Sim

Sim

Sim

—

Remover uma coluna armazenada

Não

Não

Sim

Sim

—

Adicionar uma coluna lógica

Sim

Não

Sim

Sim

Não

Remover uma coluna lógica

Sim

Não

Sim

Sim

—

Controlar o comportamento da execução online

O PolarDB-X oferece controle direto sobre o algoritmo de execução usado por uma operação DDL:

  • Para adicionar uma coluna sem backfill de dados, especifique ALGORITHM=INSTANT. Isso aciona o recurso Instant ADD COLUMN, que conclui a operação modificando apenas metadados.

  • Para modificar uma coluna online sem bloquear a tabela, especifique ALGORITHM=OMC. Isso utiliza execução lógica (online modify column).

  • DDLs executados logicamente rodam online por padrão, sem necessidade de especificação especial.

  • Para que DDLs executados fisicamente (operações comuns de coluna e de índice local) rodem online, especifique ALGORITHM=INPLACE. Se a operação não suportar execução online, um erro será retornado. Caso suporte, a operação é executada diretamente.

O que esperar durante um DDL em tabela grande

Em operações DDL que fazem backfill de dados — como criar um GSI em uma tabela grande ou dividir uma partição — considere os pontos abaixo:

  • Impacto no desempenho de DML durante o backfill: Em operações DDL executadas logicamente sem suporte a gravação múltipla assíncrona, o DML online roda como operações lógicas até a conclusão do backfill. Sempre que possível, planeje DDLs em tabelas grandes durante janelas de baixo tráfego.

  • Consumo de recursos: O backfill copia dados para novos índices. O tempo de execução depende do volume de dados, da concorrência e das especificações da instância.

  • A tabela permanece acessível: O Online DDL bloqueia o DML apenas por alguns segundos durante a troca final de tabela. Sua aplicação continua lendo e gravando normalmente durante toda a operação.

Tópicos relacionados