O AliSQL oferece o recurso Online Modify Column, que delega a modificação do tipo de coluna à camada do motor InnoDB. Isso permite alterações online sem bloquear operações de leitura e escrita.
Como funciona
Contexto: Desde o MySQL 5.6, a maioria das instruções de Linguagem de Definição de Dados (DDL) suporta Online DDL, o que permite operações de leitura e escrita em uma tabela durante o processo de DDL. No entanto, mesmo no MySQL 8.0, modificar o tipo de uma coluna exigia o método COPY DDL. O AliSQL aprimora o MySQL da comunidade ao implementar o recurso Online Modify Column, que permite modificar colunas pelo método INPLACE DDL.
Introdução: O recurso Online Modify Column do AliSQL elimina a necessidade de ler e inserir linhas individualmente na camada do servidor, processo executado pelo método COPY. Em vez disso, ele delega a modificação do tipo de coluna à camada do motor InnoDB e reutiliza a estrutura de execução INPLACE DDL da comunidade. Todo o processo é idêntico a outras operações INPLACE DDL, permitindo operações normais de leitura e escrita na tabela durante a modificação.
Pré-requisitos e limitações
Para usar o recurso Online Modify Column, sua instância deve executar uma das seguintes versões de banco de dados. Se a versão secundária do motor for anterior à necessária, atualize a versão secundária do motor.
MySQL 8.4
MySQL 8.0: versão secundária do motor 20250731 ou posterior.
MySQL 5.7: versão secundária do motor 20251031 ou posterior.
O recurso Online Modify Column está sujeito às seguintes limitações:
Limitação de motor: Apenas o motor InnoDB é compatível.
-
Limitação de tipo de coluna: Apenas modificação de tipo e extensão de comprimento são compatíveis para os seguintes tipos de dados:
Aumento do tamanho de tipos inteiros (modificação de tipo): Inclui a alteração de um tipo inteiro menor para um maior, como
TINYINT,SMALLINT,MEDIUMINT,INTeBIGINT. Por exemplo, modificar uma coluna deINTparaBIGINTé compatível, mas modificar deBIGINTparaINTnão é.Aumento do comprimento de tipos de string (extensão de comprimento): Aplica-se à extensão do comprimento dos tipos
CHAReVARCHAR. Por exemplo, para modificar uma coluna de CHAR(M) para CHAR(N), N deve ser maior que M.
Outras limitações: Você não pode modificar uma coluna que faça parte de uma chave de partição.
Descrição: Ativa ou desativa o recurso Online Modify Column.
Escopo: Global.
Tipo de dados:
Boolean.Valor padrão:
OFF.Valores válidos:
ONouOFF.Reinicialização necessária: Não.
Acesse a página Instâncias. Na barra de navegação superior, selecione a região onde a instância RDS está localizada. Em seguida, localize a instância RDS e clique no ID da instância.
No painel de navegação à esquerda, clique em Parameter Settings.
Na aba Editable Parameters, localize o parâmetro desejado e configure seu valor.
Clique em OK e, em seguida, clique em Submit Parameters. Na caixa de diálogo exibida, selecione quando as alterações entrarão em vigor.
Modificação de tipo: Altere o tipo da coluna
c1parabigint.Extensão de comprimento: Estenda o comprimento das colunas
c2ec3.
Gerenciamento de parâmetros
Parâmetros
O parâmetro a seguir controla o recurso Online Modify Column:
Parâmetro | Descrição |
|
Modifique parâmetros
Uso
Para ativar o recurso Online Modify Column, defina o parâmetro loose_rds_upgrade_datatype_online_enable como ON no console. Os exemplos a seguir utilizam uma tabela chamada t1 com a seguinte estrutura:
CREATE TABLE `t1` (
`id` int NOT NULL,
`c1` int DEFAULT NULL,
`c2` char(10) DEFAULT NULL,
`c3` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
Especifique o algoritmo INPLACE
Você pode especificar o algoritmo INPLACE para modificações online de colunas, incluindo modificação de tipo e extensão de comprimento:
-- Type modification: Use the INPLACE algorithm to modify the c1 column type.
ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL, ALGORITHM=INPLACE;
-- View the result.
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int NOT NULL,
`c1` bigint DEFAULT NULL,
`c2` char(10) DEFAULT NULL,
`c3` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.00 sec)
-- Length extension: Use the INPLACE algorithm to extend the length of the c2 and c3 columns.
ALTER TABLE `t1` MODIFY `c2` char(20) DEFAULT NULL, ALGORITHM=INPLACE;
ALTER TABLE `t1` MODIFY `c3` varchar(100) DEFAULT NULL, ALGORITHM=INPLACE;
-- View the result.
SHOW CREATE TABLE `t1`\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int NOT NULL,
`c1` bigint DEFAULT NULL,
`c2` char(20) DEFAULT NULL,
`c3` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
1 row in set (0.00 sec)
Não especifique um algoritmo
Se nenhum algoritmo for especificado, o sistema selecionará automaticamente o algoritmo mais adequado para a modificação do tipo de coluna.
ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL;