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