O AliSQL oferece o recurso Online Modify Column, que transfere a operação de modificação de tipo de coluna para a camada do mecanismo 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 Data Definition Language (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 usando o 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 transfere a operação de modificação de tipo de coluna para a camada do mecanismo 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 utilizar uma das seguintes versões de banco de dados. Se a versão secundária do mecanismo for anterior à necessária, atualize a versão secundária do mecanismo.
MySQL 8.4
MySQL 8.0: versão secundária do mecanismo 20250731 ou posterior.
MySQL 5.7: versão secundária do mecanismo 20251031 ou posterior.
O recurso Online Modify Column está sujeito às seguintes limitações:
Limitação de mecanismo: Apenas o mecanismo InnoDB tem suporte.
-
Limitação de tipo de coluna: Apenas modificação de tipo e extensão de comprimento têm suporte 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, há suporte para modificar uma coluna deINTparaBIGINT, mas não deBIGINTparaINT.Aumento do comprimento de tipos 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: Não é possível modificar uma coluna que faça parte de uma chave de partição.
Gerenciamento de parâmetros
Parâmetros
O parâmetro a seguir controla o recurso Online Modify Column:
Parâmetro | Descrição |
|
|
Modifique parâmetros
Acesse a página Instances. Na barra de navegação superior, selecione a região onde reside a instância RDS. Em seguida, localize a instância RDS e clique em 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.
Uso
Para ative 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
Especifique o algoritmo INPLACE para modificações online de colunas, incluindo modificação de tipo e extensão de comprimento:
Modificação de tipo: Altere o tipo da coluna
c1parabigint.Extensão de comprimento: Estenda o comprimento das colunas
c2ec3.
-- 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;