Tous les produits
Search
Centre de documentation

PolarDB:Qu'est-ce que la fonctionnalité Instant Modify Column de PolarDB ?

Dernière mise à jour :Aug 11, 2026

MySQL standard utilise l'algorithme COPY pour modifier le type de données d'une colonne. Cette méthode reconstruit intégralement la table sur un seul thread et bloque toutes les écritures. Pour les tables volumineuses, cette opération peut durer de plusieurs minutes à quelques heures. La fonctionnalité Instant Modify Column de PolarDB for MySQL évite cette contrainte en mettant à jour uniquement les métadonnées de la table. L'opération s'exécute ainsi en quelques secondes, quelle que soit la taille de la table.

Instant Modify Column est disponible en version canary. Pour utiliser cette fonctionnalité, accédez au Quota Center , recherchez le quota polarm_82_instant_modify_column , puis cliquez sur Apply .

Versions prises en charge

Paramètres

Paramètre Niveau Description Valeur par défaut
loose_innodb_polar_instant_modify_column_enable Global Active ou désactive Instant Modify Column. Valeurs valides : ON, OFF OFF
loose_innodb_polar_instant_modify_column_max_times Global Nombre maximal de modifications de types de colonnes autorisées par cette fonctionnalité sur une même table. Plage : 1–64 16

Opérations prises en charge

Instant Modify Column prend uniquement en charge l'augmentation de la longueur des colonnes pour les types de données suivants. Consultez ce tableau pour vérifier la compatibilité de votre opération avant de l'exécuter.

Type de colonne Modification prise en charge Exemple pris en charge Exemple non pris en charge
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT Passage à un type entier plus large INT → BIGINT BIGINT → INT
VARCHAR(N) Augmentation de la longueur (N vers N+M, où M > 0) VARCHAR(50) → VARCHAR(300) VARCHAR(300) → VARCHAR(50)
CHAR(N) Augmentation de la longueur (N vers N+M, où M > 0) CHAR(30) → CHAR(50) CHAR(50) → CHAR(30)

Les restrictions supplémentaires suivantes s'appliquent également :

Restriction Détails
Format de ligne Formats de ligne COMPACT ou DYNAMIC uniquement
Colonnes indexées Modification impossible pour les colonnes disposant d'un index
Tables partitionnées Modification impossible pour les colonnes des tables partitionnées
Index full-text ou spatiaux Modification impossible pour les colonnes des tables contenant des index full-text ou spatiaux
DDL combinées Combinaison d'Instant Modify Column avec d'autres opérations DDL dans la même instruction interdite

Si votre opération ne respecte pas ces conditions et que vous spécifiez ALGORITHM=INSTANT, l'erreur suivante s'affiche :

ERROR 1846 (0A000): ALGORITHM=INSTANT is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY/INPLACE
Astuce : Avant d'exécuter une instruction DDL, utilisez EXPLAIN DDL pour vérifier si l'algorithme INSTANT est pris en charge pour cette opération.

Modifier instantanément un type de colonne

Forcer l'algorithme INSTANT (recommandé)

Spécifiez ALGORITHM=INSTANT pour imposer l'utilisation d'Instant Modify Column. Si l'opération ne peut pas utiliser l'algorithme INSTANT, une erreur s'affiche immédiatement au lieu d'un basculement silencieux vers un algorithme plus lent.

CREATE TABLE t(a int);

-- Verify the current table structure
SHOW CREATE TABLE t;
-- Output:
-- CREATE TABLE `t` (
--   `a` int(11) DEFAULT NULL
-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8

-- Modify the column type using the INSTANT algorithm
ALTER TABLE t MODIFY COLUMN a bigint DEFAULT NULL, ALGORITHM=INSTANT;

Laisser PolarDB choisir automatiquement l'algorithme

Omettez la clause d'algorithme ou spécifiez ALGORITHM=DEFAULT pour permettre à PolarDB for MySQL de sélectionner automatiquement l'algorithme le plus efficace.

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

PolarDB for MySQL évalue les algorithmes selon l'ordre de priorité suivant :

Priorité Algorithme Comportement
1 (la plus élevée) INSTANT Met à jour uniquement les métadonnées. L'opération s'achève en quelques secondes, quelle que soit la taille de la table. Aucune reconstruction de table n'est nécessaire.
2 INPLACE Autorise les lectures et écritures simultanées pendant l'opération DDL. Le DDL parallèle peut encore accélérer le processus.
3 (la plus basse) COPY Reconstruit la table dans son intégralité. La table passe en lecture seule pendant toute la durée de l'opération.

Consulter les colonnes modifiées instantanément

La table INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS recense toutes les colonnes du cluster actuel modifiées via Instant Modify Column. Seules les colonnes traitées par cette fonctionnalité y figurent.

SELECT * FROM INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS;

Schéma de la table :

SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_INSTANT_COLUMNS;
-- 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

Description des champs :

Champ Description
TABLE_ID ID de la table
TABLE_NAME Nom de la table
SCHEMA_NAME Nom du schéma
COLUMN_NAME Nom de la colonne
MTYPE Type de la colonne
PRTYPE Type précis ou attributs de la colonne
LEN Longueur de la colonne
HAS_DEFAULT Indique si la colonne possède une valeur par défaut
DEFAULT_VALUE Valeur par défaut de la colonne
CURRENT_VERSION Informations de version de la colonne
OLD_VERSION_INFO Historique des informations de type de la colonne
Si vous exécutez une opération DDL nécessitant une reconstruction complète de la table (telle que DROP COLUMN ) sur une colonne précédemment modifiée par Instant Modify Column, l'enregistrement correspondant disparaît de INNODB_INSTANT_COLUMNS .