AliSQL prend en charge la fonctionnalité Online Modify Column, qui délègue l'opération de modification du type de colonne au niveau du moteur InnoDB. Cette approche permet des modifications en ligne sans bloquer les opérations de lecture et d'écriture.
Fonctionnement
Contexte : Depuis MySQL 5.6, la plupart des instructions Data Definition Language (DDL) prennent en charge le mécanisme Online DDL, qui autorise les opérations de lecture et d'écriture sur une table pendant l'exécution du DDL. Toutefois, même dans MySQL 8.0, la modification du type d'une colonne nécessitait toujours la méthode COPY DDL. AliSQL s'appuie sur la version communautaire de MySQL en implémentant la fonctionnalité Online Modify Column, qui permet de modifier les colonnes via la méthode INPLACE DDL.
Présentation : La fonctionnalité Online Modify Column d'AliSQL évite la lecture et l'insertion ligne par ligne au niveau du serveur, processus inhérent à la méthode COPY. Elle délègue plutôt l'opération de modification du type de colonne au moteur InnoDB et réutilise le framework d'exécution INPLACE DDL de la communauté. Le processus est identique à celui des autres opérations INPLACE DDL, ce qui permet de maintenir les opérations de lecture et d'écriture normales sur la table pendant la modification.
Prérequis et limites
Pour utiliser la fonctionnalité Online Modify Column, votre instance doit exécuter l'une des versions de base de données suivantes. Si la version mineure du moteur est antérieure à celle requise, mettez à niveau la version mineure du moteur.
MySQL 8.4
MySQL 8.0 : version mineure du moteur 20250731 ou ultérieure.
MySQL 5.7 : version mineure du moteur 20251031 ou ultérieure.
La fonctionnalité Online Modify Column est soumise aux limites suivantes :
Limite liée au moteur : Seul le moteur InnoDB est pris en charge.
-
Limite liée au type de colonne : Seules la modification de type et l'extension de longueur sont prises en charge pour les types de données suivants :
Augmentation de la taille des types entiers (modification de type) : cela inclut le passage d'un type entier plus petit à un type plus grand, tels que
TINYINT,SMALLINT,MEDIUMINT,INTetBIGINT. Par exemple, la modification d'une colonne deINTversBIGINTest prise en charge, mais le passage deBIGINTversINTne l'est pas.Augmentation de la longueur des types chaîne (extension de longueur) : cela s'applique à l'extension de la longueur des types
CHARetVARCHAR. Par exemple, pour modifier une colonne de CHAR(M) en CHAR(N), N doit être supérieur à M.
Autres limites : Vous ne pouvez pas modifier une colonne faisant partie d'une clé de partitionnement.
Gestion des paramètres
Paramètres
La fonctionnalité Online Modify Column est contrôlée par le paramètre suivant :
Parameter | Description |
|
|
Modifier les paramètres
Accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où se trouve l'instance RDS. Localisez ensuite l'instance RDS et cliquez sur son ID.
Dans le volet de navigation de gauche, cliquez sur Parameter Settings.
Sous l'onglet Editable Parameters, recherchez le paramètre à modifier et configurez sa valeur.
Cliquez sur OK, puis sur Submit Parameters. Dans la boîte de dialogue qui s'affiche, spécifiez le moment où les modifications prendront effet.
Utilisation
Pour activer la fonctionnalité Online Modify Column, définissez le paramètre loose_rds_upgrade_datatype_online_enable sur ON dans la console. Les exemples suivants utilisent une table nommée t1 avec la structure suivante :
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;
Spécifier l'algorithme INPLACE
Vous pouvez spécifier l'algorithme INPLACE pour les modifications de colonne en ligne, y compris la modification de type et l'extension de longueur :
Modification de type : changez le type de la colonne
c1enbigint.Extension de longueur : augmentez la longueur des colonnes
c2etc3.
-- 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)
Ne pas spécifier d'algorithme
Si vous ne spécifiez aucun algorithme, le système sélectionne automatiquement l'algorithme le plus approprié pour la modification du type de colonne.
ALTER TABLE `t1` MODIFY `c1` bigint DEFAULT NULL;