Tous les produits
Search
Centre de documentation

PolarDB:DDL for cold data

Dernière mise à jour :Aug 11, 2026

Lors de l'exécution d'instructions DDL sur des tables de données froides stockées dans Object Storage Service (OSS), PolarDB for MySQL sélectionne automatiquement l'algorithme d'exécution le plus efficace. Cette rubrique détaille les deux algorithmes pris en charge (INSTANT et COPY), explique le prérequis OSS META pour le DDL INSTANT et répertorie les opérations associées à chaque algorithme afin de planifier vos modifications DDL sans perturber votre charge de travail.

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster PolarDB for MySQL exécutant MySQL 8.0.2 avec une version de révision 8.0.2.2.23 ou ultérieure

  • L'archivage des données froides activé sur le cluster. Consultez Activer l'archivage des données froides

  • Une connexion active au cluster. Consultez Se connecter à un cluster

  • Des données froides au format CSV (Comma-Separated Values) ou ORC (Optimized Row Columnar)

Fonctionnement

PolarDB for MySQL prend en charge deux algorithmes d'exécution DDL pour les données froides :

  • Algorithme INSTANT : modifie uniquement les métadonnées du dictionnaire de données. Les données existantes ne sont ni modifiées, ni copiées, ni reconstruites. L'opération s'achève en quelques secondes, quelle que soit la taille de la table. Il s'agit du comportement par défaut ; PolarDB for MySQL l'applique automatiquement lorsqu'il est pris en charge.

  • COPY algorithm: copie toutes les données de la table vers une nouvelle table. Pendant la copie, la table originale est soumise à un verrou SHARED_NO_WRITE (SNW) : les lectures sont autorisées, mais les écritures sont bloquées. Réservez cet algorithme aux cas où INSTANT n'est pas applicable.

Pour spécifier explicitement un algorithme, utilisez la clause ALGORITHM avec DEFAULT, INSTANT ou COPY. Si l'algorithme spécifié ne prend pas en charge l'opération, une erreur est renvoyée.

Remarque

Par défaut, PolarDB for MySQL sélectionne INSTANT et ne recourt à COPY que lorsque l'opération nécessite une reconstruction de la table.

Activer OSS META pour utiliser le DDL INSTANT

Une table ne prend en charge le DDL INSTANT que si OSS META est activé. OSS META est une couche de métadonnées améliorée disponible à partir de la version de révision 8.0.2.2.23.

Vérifier si OSS META est activé

Exécutez SHOW CREATE TABLE. Si OSS META=1 apparaît dans la sortie, OSS META est activé.

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)

Activer OSS META pour les nouvelles tables

Définissez le paramètre use_oss_meta sur ON. Ce réglage s'applique aux trois scénarios d'archivage : les tables InnoDB non partitionnées archivées vers des tables externes OSS, les tables InnoDB partitionnées archivées vers des tables externes OSS, ainsi que les tables InnoDB archivées vers des partitions OSS.

Vérifiez que le paramètre est actif :

show variables like "use_oss_meta";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| use_oss_meta  | ON    |
+---------------+-------+
1 row in set (0.03 sec)

Lorsque use_oss_meta est défini sur ON, les tables nouvellement archivées incluent automatiquement le marqueur OSS META. Les exemples suivants illustrent l'apparition de ce marqueur après l'archivage d'une table non partitionnée et d'une table partitionnée :

alter table t engine = csv storage oss;
Query OK, 3 rows affected (2.13 sec)
Records: 3  Duplicates: 0  Warnings: 0

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)

alter table t1 change partition p0 engine = orc;
Query OK, 0 rows affected (1.95 sec)
Records: 0  Duplicates: 0  Warnings: 0

show create table t1 \G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `order_time` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020223 OSS META=1 */ CONNECTION='default_oss_server'
/*!99990 800020205 PARTITION BY RANGE  COLUMNS(id)
(PARTITION p0 VALUES LESS THAN (10) ENGINE = ORC,
 PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB,
 PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB,
 PARTITION p4 VALUES LESS THAN (50) ENGINE = InnoDB,
 PARTITION p5 VALUES LESS THAN (60) ENGINE = InnoDB,
 PARTITION p6 VALUES LESS THAN (70) ENGINE = InnoDB,
 PARTITION p7 VALUES LESS THAN (80) ENGINE = InnoDB,
 PARTITION p8 VALUES LESS THAN (90) ENGINE = InnoDB,
 PARTITION p9 VALUES LESS THAN (100) ENGINE = InnoDB,
 PARTITION p10 VALUES LESS THAN (110) ENGINE = InnoDB) */
1 row in set (0.00 sec)

Activer OSS META pour les tables existantes

Exécutez REPAIR TABLE pour ajouter OSS META à une table existante :

repair table t;
+--------+--------+----------+----------+
| Table  | Op     | Msg_type | Msg_text |
+--------+--------+----------+----------+
| test.t | repair | status   | OK       |
+--------+--------+----------+----------+
1 row in set (0.84 sec)

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */ /*!99990 800020223 OSS META=1 */
1 row in set (0.00 sec)
Important

Pendant l'exécution de REPAIR TABLE, un verrou X bloque la table. Toute interrogation ou modification est alors impossible. La durée d'exécution dépend de la taille de la table.

Désactiver OSS META

Exécutez ALTER TABLE ... DISABLE OSS META pour supprimer le marqueur OSS META :

alter table t disable oss meta;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

show create table t \G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE `t` (
  `id` varchar(1000) DEFAULT NULL
) /*!50100 */ /*!99990 800020213 STORAGE OSS */ ENGINE=CSV DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci /*!99990 800020204 NULL_MARKER='NULL' */
1 row in set (0.00 sec)
Remarque

La modification prend effet immédiatement, sans redémarrage du service de base de données.

Opérations DDL prises en charge

Les tableaux ci-dessous indiquent si chaque opération utilise INSTANT (métadonnées uniquement) ou COPY (reconstruction de la table).

Opérations sur les colonnes

Opération Reconstruction de la table Modification des métadonnées uniquement
Ajouter une colonne Non¹ Oui¹
Supprimer une colonne Oui Non
Renommer une colonne Non Oui
Trier les colonnes Oui Non
Spécifier la valeur par défaut d'une colonne Non Oui
Modifier le commentaire d'une colonne Non Oui
Changer le type d'une colonne Oui Non
Étendre la longueur d'une colonne VARCHAR Non Oui
Passer le jeu de caractères utf8mb3 d'une colonne à utf8mb4 Non² Oui²
Supprimer la valeur par défaut d'une colonne Non Oui
Modifier la valeur d'auto-incrémentation d'une colonne Non Oui
Définir les valeurs d'une colonne sur NULL Oui Non
Définir les valeurs d'une colonne sur des valeurs non NULL Oui Non
Modifier la définition d'une colonne ENUM ou SET Non Oui³

Note 1 — Ajouter une colonne : la fonctionnalité Instant ADD COLUMN ajoute des colonnes uniquement à la fin d'une table avec OSS META activé. Si la table ne possède pas de clé primaire, définissez implicit_primary_key sur OFF afin d'éviter tout conflit avec une colonne de clé primaire implicite générée automatiquement. Si le cluster ne prend pas en charge Instant ADD COLUMN, utilisez l'algorithme COPY : une reconstruction de la table est alors nécessaire, bien que les lectures simultanées restent autorisées pendant cette opération.

Note 2 — Passage de utf8mb3 à utf8mb4 : le changement du jeu de caractères d'une colonne de utf8mb3 à utf8mb4 ne modifie que les métadonnées lorsque les trois conditions suivantes sont réunies :

  • Le type de la colonne est CHAR, VARCHAR, ENUM ou TEXT

  • Aucun index n'est créé sur la colonne

  • La longueur de stockage maximale de la colonne (avant et après la conversion) reste soit inférieure à 256 octets, soit supérieure à 255 octets

Si l'une de ces conditions n'est pas remplie, l'algorithme COPY est utilisé : la table est verrouillée et seules les lectures sont autorisées pendant la reconstruction. Pour forcer INSTANT et obtenir une erreur immédiate si cet algorithme n'est pas applicable :

ALTER TABLE test modify column b char(1) CHARACTER SET utf8mb4 default null,algorithm = INSTANT;
ERROR 1845 (0A000): ALGORITHM=INSTANT is not supported for this operation. Try ALGORITHM=COPY/INPLACE.

Note 3 — Colonne ENUM ou SET : la modification des métadonnées uniquement s'applique seulement lorsque de nouveaux éléments sont ajoutés à la fin de la colonne ENUM ou SET et que la taille de stockage du type de données reste inchangée. Dans le cas contraire, l'algorithme COPY est utilisé avec une reconstruction complète de la table.

Opérations sur les tables

Opération Reconstruction de la table Modification des métadonnées uniquement
Activer META Oui Non
Désactiver META Non Oui
Déclarer un jeu de caractères Non Oui
Convertir un jeu de caractères Oui Non
Renommer une table Non Oui¹
Modifier le commentaire d'une table Non Oui

Note 1 — Renommer une table : lors du renommage d'une table stockée dans OSS, les fichiers de données OSS sont renommés plutôt que réécrits. La vitesse d'exécution est proportionnelle à la taille de la table et légèrement inférieure à celle des autres opérations INSTANT qui ne modifient que les métadonnées.