Todos os produtos
Search
Central de documentação

ApsaraDB RDS:Instant ADD COLUMN

Última atualização: Sep 18, 2026

Alterações de esquema em tabelas grandes podem levar horas com o ADD COLUMN tradicional, que reconstrói a tabela inteira, consome grandes quantidades de I/O e memória e pode bloquear workloads de DML concorrentes. O Instant ADD COLUMN elimina esses problemas ao modificar apenas os metadados no dicionário de dados — concluindo em segundos para tabelas de qualquer tamanho, sem bloqueios e com quase nenhuma sobrecarga de recursos.

Como funciona

O ADD COLUMN tradicional (modo COPY ou INPLACE) reconstrói a tabela inteira. Em tabelas grandes, esse processo pode levar horas e bloquear workloads de DML concorrentes.

O Instant ADD COLUMN (modo INSTANT) modifica apenas os metadados no dicionário de dados. Os dados da tabela em si nunca são alterados.

A tabela a seguir resume as diferenças.

ADD COLUMN tradicional (COPY ou INPLACE)

Instant ADD COLUMN (INSTANT)

Tempo

Exige reconstrução completa da tabela. O tempo aumenta proporcionalmente ao tamanho da tabela.

Modifica apenas os metadados. Conclui em segundos.

Uso de recursos

Consome grandes quantidades de I/O e memória temporariamente.

Utiliza praticamente nenhum recurso adicional.

Impacto no negócio

Pode bloquear workloads online durante transações de longa duração ou sob alta concorrência.

Não bloqueia tabelas nem operações.

Tamanho da tabela

Tabelas grandes não são compatíveis com adição rápida de colunas.

Funciona em tabelas de qualquer tamanho.

Pré-requisitos

Antes de começar, verifique se sua instância atende a um dos seguintes requisitos de versão. Se a versão secundária do engine não atender aos requisitos, atualize a versão secundária do engine.

  • MySQL 8.0: todas as versões secundárias do engine são compatíveis.

  • MySQL 5.7: a versão secundária do engine deve ser 20250331 ou posterior.

Limitações

Engine e tipo de tabela

  • Apenas o storage engine InnoDB é compatível.

  • Tabelas compactadas, tabelas com índices full-text e tabelas temporárias não são compatíveis.

Operações

  • Não é possível combinar múltiplas operações DDL em um único statement. Por exemplo, criar um índice ao mesmo tempo que se adiciona uma coluna não é compatível.

Instâncias somente leitura

Se sua instância primária usa alta disponibilidade e tem instâncias somente leitura associadas, defina loose_innodb_instant_ddl_enabled como ON tanto na instância primária quanto nas instâncias somente leitura. Caso contrário, a replicação pode ser interrompida nas instâncias somente leitura.

Posição padrão da coluna

MySQL version

Minor engine version

Default column position

5.7

20250331 ou posterior

A nova coluna é adicionada como a última coluna.

8.0

Anterior a 20230630

A nova coluna é adicionada como a última coluna.

20230630 ou posterior

A posição da coluna pode ser especificada.

Para MySQL 5.7 ou MySQL 8.0 (anterior a 20230630), certifique-se de que não existe uma chave primária implícita na tabela. Consulte a seção de FAQ para mais detalhes.

Ativar o Instant ADD COLUMN

MySQL 8.0 tem o Instant ADD COLUMN ativado por padrão. Nenhuma configuração é necessária.

Para MySQL 5.7, ative o recurso definindo o parâmetro loose_innodb_instant_ddl_enabled:

  1. Acesse a página RDS Instances. Selecione a região onde sua instância reside e clique no ID da instância de destino.

  2. No painel de navegação à esquerda, clique em Parameters.

  3. Na aba Modifiable Parameters, pesquise por loose_innodb_instant_ddl_enabled. Na coluna Running Value, defina o valor como ON.

    Nota

    Essa alteração entra em vigor imediatamente. Nenhuma reinicialização é necessária.

  4. Clique em Apply Changes. Na caixa de diálogo, selecione quando a alteração entra em vigor e clique em OK.

Operações relacionadas

Use Instant ADD COLUMN

Force o modo INSTANT especificando o algoritmo de forma explícita:

ALTER TABLE <table_name> ADD COLUMN <column_name> <data_type> <constraints>, ALGORITHM = INSTANT;

Deixe o RDS selecionar o algoritmo automaticamente — o RDS for MySQL escolhe o modo ideal em tempo de execução. Se o modo INSTANT for compatível com sua tabela, ele será utilizado:

ALTER TABLE <table_name> ADD COLUMN <column_name> <data_type> <constraints>;

Substitua os seguintes placeholders pelos valores reais:

Placeholder

Descrição

<table_name>

Nome da tabela de destino

<column_name>

Nome da nova coluna

<data_type>

Tipo de dados da nova coluna, por exemplo, INT ou VARCHAR(255)

<constraints>

Restrições opcionais, por exemplo, NOT NULL DEFAULT 0

View tables that used Instant ADD COLUMN

MySQL 5.7:

SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE INSTANT_COLS > 0;

MySQL 8.0 (anterior a 20230630):

SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE INSTANT_COLS > 0;

MySQL 8.0 (20230630 ou posterior):

SELECT * FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0;

View columns added by Instant ADD COLUMN

MySQL 5.7 — o MySQL 5.7 adiciona a tabela INNODB_SYS_INSTANT_COLUMNS ao banco de dados INFORMATION_SCHEMA:

SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_INSTANT_COLUMNS WHERE TABLE_ID =
(SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE NAME = "<database_name>/<table_name>");

MySQL 8.0 — um valor HAS_DEFAULT igual a 1 indica que a coluna foi adicionada usando o Instant ADD COLUMN:

SELECT * FROM INFORMATION_SCHEMA.INNODB_COLUMNS WHERE TABLE_ID =
(SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE NAME = "<database_name>/<table_name>");

FAQ

P1: Minha instância atende aos requisitos para o Instant ADD COLUMN, mas recebo este erro ao adicionar uma coluna: Feature not supported: 1845 ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.

R:

Causa: quando uma tabela não possui chave primária nem chave única, o RDS for MySQL adiciona uma chave primária implícita para melhorar a eficiência da replicação. Por padrão, essa chave primária implícita ocupa a última posição como coluna. Isso força o Instant ADD COLUMN a inserir a nova coluna em uma posição específica. Entretanto, o MySQL 5.7 e o MySQL 8.0 (anterior a 20230630) não oferecem suporte à inserção de colunas em posições específicas.

Solução: para MySQL 5.7 ou MySQL 8.0 (anterior a 20230630), certifique-se de que não existe uma chave primária implícita na tabela.