Todos os produtos
Search
Central de documentação

PolarDB:Instant modify column

Última atualização: Nov 03, 2026

No ecossistema MySQL, alterar o tipo de uma coluna exige o algoritmo COPY para reconstruir toda a tabela. Durante essa reconstrução, a tabela de destino aceita apenas consultas de leitura e não lida com gravações simultâneas. Além disso, o algoritmo COPY reconstrói a tabela inteira em uma única thread, o que resulta em baixa eficiência. Por isso, a alteração de tipos de colunas sempre foi um ponto crítico no ecossistema MySQL. Para resolver esse problema, o PolarDB for MySQL oferece o recurso de modificação instantânea de colunas (Instant Modify Column). Ao alterar o tipo de uma coluna, apenas a definição da tabela é atualizada, sem modificar os dados existentes. Assim, você altera rapidamente o tipo de coluna em tabelas de qualquer tamanho. Este tópico descreve como utilizar o recurso de modificação instantânea de colunas.

Pré-requisitos

O cluster deve executar o PolarDB for MySQL 8.0.2 com versão de revisão 8.0.2.2.28 ou posterior. Consulte o número da versão para confirmar a versão do cluster.

Parâmetros

Parâmetro

Nível

Descrição

loose_innodb_polar_instant_modify_column_enable

Global

Define se o recurso de modificação instantânea de colunas está ativado. Valores válidos:

  • ON: ativa o recurso de modificação instantânea de colunas.

  • OFF (padrão): desativa o recurso de modificação instantânea de colunas.

loose_innodb_polar_instant_modify_column_max_times

Global

Especifica o número máximo de modificações instantâneas de colunas permitidas em uma única tabela.

Valores válidos: 1 a 64. Valor padrão: 16.

Nota

O recurso de modificação instantânea de colunas do PolarDB for MySQL está em lançamento canário. Para utilizá-lo, acesse o Quota Center, localize o nome da cota pelo ID da cota polarm_82_instant_modify_column e clique em Apply na coluna Actions correspondente para ativar o recurso.

Limites de uso

  • A modificação instantânea de colunas serve apenas para aumentar o comprimento dos seguintes tipos de dados. Outros atributos de coluna não podem ser modificados instantaneamente. As alterações suportadas são:

    • Tipos inteiros: é possível modificar instantaneamente entre os tipos TINYINT, SMALLINT, MEDIUMINT, INT e BIGINT. A modificação instantânea suporta apenas o aumento do comprimento, não a redução.

      Por exemplo, INT pode ser modificado instantaneamente para o tipo BIGINT, mas não é possível modificar BIGINT para INT instantaneamente.

    • Tipos string:

      • Use a modificação instantânea para alterar um tipo VARCHAR(N) para VARCHAR(N+M), onde N e M são números inteiros positivos maiores que 0.

        Por exemplo, VARCHAR(50) pode ser modificado instantaneamente para o tipo VARCHAR(300), mas o tipo VARCHAR(300) não pode ser modificado instantaneamente para VARCHAR(50).

      • Use a modificação instantânea para mudar um tipo CHAR(N) para CHAR(N+M), onde N e M são números inteiros positivos maiores que 0.

        Por exemplo, CHAR(30) pode ser modificado instantaneamente para o tipo CHAR(50), mas o tipo CHAR(50) não pode ser modificado instantaneamente para CHAR(30).

  • Somente tabelas com formato de linha COMPACT ou DYNAMIC são suportadas.

  • A coluna a ser modificada não pode ser uma coluna de índice.

  • Não há suporte para modificação instantânea de colunas em tabelas particionadas.

  • Tabelas que utilizam índices de texto completo ou índices espaciais não são suportadas.

  • Não execute outras operações DDL juntamente com a modificação instantânea de colunas na mesma instrução SQL.

Nota

Antes de executar uma operação DDL, utilize o recurso EXPLAIN DDL para verificar se a operação suporta INSTANT. Para mais informações, consulte EXPLAIN DDL.

Uso

Especificar ALGORITHM=INSTANT para forçar a modificação instantânea de colunas (recomendado)

CREATE TABLE t(a int);
SHOW CREATE TABLE t;
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- Specify the INSTANT algorithm to quickly modify the column type
ALTER TABLE t modify COLUMN a bigint DEFAULT NULL,algorithm=INSTANT;
Nota

Ao usar a instrução anterior, se o sistema retornar ERROR 1846 (0A000): ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY/INPLACE., a modificação atual do tipo de coluna não pode ser realizada com o algoritmo INSTANT. Recomendamos verificar se o parâmetro loose_innodb_polar_instant_modify_column_enable está ativado e revisar cuidadosamente os Limites de uso.

Não especificar ALGORITHM ou definir ALGORITHM=DEFAULT para permitir que o PolarDB for MySQL escolha o método ideal

Se você não especificar ALGORITHM ou defini-lo como ALGORITHM=DEFAULT, o sistema seleciona o algoritmo ideal para a modificação do tipo de coluna seguindo esta ordem de prioridade.

ALTER TABLE test.test_table MODIFY COLUMN test_column bigint, ALGORITHM=DEFAULT;
ALTER TABLE test.test_table MODIFY COLUMN test_column bigint;
Nota

O PolarDB for MySQL utiliza a seguinte ordem de prioridade ao selecionar um algoritmo:

  • Preferência pelo INSTANT: ao executar uma operação DDL, o INSTANT modifica apenas os metadados no dicionário de dados, sem alterar os dados da tabela. Portanto, o tamanho da tabela não afeta o processo, e toda a operação DDL pode ser concluída em segundos.

  • Uso subsequente do INPLACE: a maioria das operações DDL INPLACE suporta leituras e gravações simultâneas durante a execução e pode ser acelerada via DDL paralelo, resultando em baixo impacto nos negócios.

  • Uso do COPY como última opção: o COPY reconstrói a tabela inteira, não permite gravações simultâneas durante a reconstrução e causa impacto significativo nos negócios.

Visualizar informações sobre colunas modificadas instantaneamente

No banco de dados INFORMATION_SCHEMA, foi adicionada uma nova tabela chamada INNODB_INSTANT_COLUMNS. Essa tabela registra informações sobre todas as colunas que foram modificadas instantaneamente no cluster (apenas colunas modificadas instantaneamente aparecem nesta tabela). O esquema da tabela é o seguinte:

SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS;
***************************[ 1. row ]***************************
Table        | INNODB_INSTANT_COLUMNS
Create Table | CREATE TEMPORARY TABLE `INNODB_INSTANT_COLUMNS` (
  `TABLE_ID` bigint(21) unsigned NOT NULL DEFAULT '0',
  `TABLE_NAME` varchar(193) NOT NULL DEFAULT '',
  `SCHEMA_NAME` varchar(193) NOT NULL DEFAULT '',
  `COLUMN_NAME` varchar(193) NOT NULL DEFAULT '',
  `MTYPE` int(11) NOT NULL DEFAULT '0',
  `PRTYPE` int(11) NOT NULL DEFAULT '0',
  `LEN` int(11) NOT NULL DEFAULT '0',
  `HAS_DEFAULT` int(1) NOT NULL DEFAULT '0',
  `DEFAULT_VALUE` mediumblob,
  `CURRENT_VERSION` int(11) NOT NULL DEFAULT '0',
  `OLD_VERSION_INFO` blob
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Os campos são descritos da seguinte forma:

Campo

Descrição

TABLE_ID

O ID da tabela.

TABLE_NAME

O nome da tabela.

SCHEMA_NAME

O nome do banco de dados.

COLUMN_NAME

O nome da coluna.

MTYPE

As informações de tipo da coluna: MYSQL_TYPE_XXX.

PRTYPE

As informações PRTYPE da coluna.

LEN

As informações de comprimento da coluna.

HAS_DEFAULT

Indica se a coluna possui um valor padrão. O valor é 1 para colunas adicionadas instantaneamente e 0 caso contrário.

DEFAULT_VALUE

O valor padrão.

CURRENT_VERSION

As informações de versão da coluna atual.

OLD_VERSION_INFO

Todas as informações históricas de tipo da coluna.

Com a tabela INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS, execute a seguinte instrução para visualizar as colunas que foram modificadas instantaneamente no cluster:

SELECT * FROM INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS;
Nota

Se uma tabela tiver sido modificada usando o algoritmo INSTANT e, em seguida, for executada uma operação DDL que reconstrua a tabela (como DROP COLUMN), o sistema exclui as informações de coluna relacionadas a essa tabela da tabela INNODB_INSTANT_COLUMNS.