La modification du schéma d'une base de données en production comporte des risques : un verrouillage prolongé de la table peut bloquer votre application. La fonctionnalité Online DDL de PolarDB-X réduit le verrouillage des tables afin que les opérations DDL et les transactions DML s'exécutent simultanément, garantissant ainsi la réactivité de votre base de données lors des changements de schéma.
Prérequis
Avant d'exécuter des opérations Online DDL, confirmez les points suivants :
La version 5.4.16-16717637 ou ultérieure du nœud de calcul est requise pour la multi-écriture asynchrone sur les opérations DDL exécutées logiquement. Consultez les Notes de version.
Les exigences de version et de conditions varient selon le type de DDL. Reportez-vous aux rubriques suivantes : Instructions de partitionnement, Instant ADD COLUMN, Modification des types de colonnes sans verrouillage des tables, Sequence, Colonnes générées, Utilisation des index secondaires globaux et Instructions de groupe de tables.
Fonctionnement
PolarDB-X exécute les DDL de deux manières distinctes selon le type d'opération.
Les DDL exécutés physiquement sont délégués aux nœuds de données. Le nœud de calcul gère le transfert au niveau des shards, la coordination et la gestion des métadonnées. Les opérations de cette catégorie — CREATE LOCAL INDEX, ALTER/ADD COLUMN et CREATE/DROP TABLE — suivent les mêmes principes d'exécution en ligne que les DDL MySQL.
Les DDL exécutés logiquement s'effectuent entièrement sur les nœuds de calcul. Au lancement d'une telle opération, le système crée une table temporaire, y copie les données existantes et capture simultanément les mises à jour DML incrémentielles. Une fois les données historiques et incrémentielles synchronisées, le système bascule le trafic de la table d'origine vers la table temporaire, sans la verrouiller. Cette catégorie comprend notamment GLOBAL INDEX, CREATE/DROP PARTITION, CREATE/DROP PRIMARY KEY et la Modification des types de colonnes sans verrouillage des tables.
Impact de chaque type de DDL sur la charge de travail
Pour évaluer l'impact d'une opération DDL sur votre base de données, examinez trois aspects :
Verrouillage des tables
Le Online DDL ne bloque les opérations DML que pendant quelques secondes, uniquement lors du basculement final de la table. Durant la majeure partie de l'exécution, les DML s'exécutent librement.
Les DDL non online verrouillent la table pendant toute la durée de l'opération.
Rechargement des données
Les opérations modifiant uniquement les métadonnées — comme
INSTANT ADD COLUMNetRENAME TABLE— se terminent instantanément, sans rechargement de données.Les commandes
DROP TABLEetDROP INDEXmodifient les métadonnées et suppriment rapidement les fichiers physiques, également sans rechargement.Toutes les autres opérations DDL copient les données d'origine vers de nouveaux index cluster ou secondaires. Le temps d'exécution dépend du volume de données, de la concurrence et des spécifications de l'instance.
Multi-écriture synchrone
Les opérations DDL exécutées logiquement qui rechargent des données doivent également écrire le trafic DML concurrent dans la table temporaire. Comme ces multi-écritures utilisent des transactions distribuées pour garantir l'atomicité, les opérations DML s'exécutent alors comme des opérations logiques, ce qui réduit les performances des DML en ligne.
Pour limiter cet impact, PolarDB-X met en œuvre la multi-écriture asynchrone pour MOVE/SPLIT PARTITION, la Modification des types de colonnes sans verrouillage des tables et REBALANCE. Le trafic DML est mis en cache puis rejoué après la fin du rechargement, ce qui réduit les conflits et raccourcit la fenêtre de dégradation des performances.
Pour les DDL exécutés physiquement qui rechargent des données sans verrouillage, la multi-écriture asynchrone native est gérée automatiquement via les journaux en ligne. Les opérations ne rechargeant pas de données ne nécessitent aucune multi-écriture.
Référence des fonctionnalités Online DDL
Lorsque vous utilisez MODIFY COLUMN ou CHANGE COLUMN, spécifiez toujours les attributs complets de la colonne. L'omission d'attributs peut entraîner des modifications inattendues. Exécutez SHOW FULL CREATE TABLE TABLE_NAME pour consulter la définition complète des colonnes avant d'appliquer des changements.
Opérations sur les index
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Création d'un index secondaire local (LSI) | Non | Non | Non | Oui | — |
| Suppression d'un LSI | Non | Non | Non | Non | — |
| Renommage d'un LSI | Non | Non | Non | Non | — |
| Création d'un index secondaire global (GSI) | Oui | Non | Oui | Oui | Non |
| Suppression d'un GSI | Oui | Non | Non | Non | — |
| Renommage d'un GSI | Oui | Non | Non | Non | — |
Opérations sur les tables
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Modification du format de ligne (ROW_FORMAT) | Non | Non | Oui | Oui | — |
| OPTIMIZE TABLE | Non | Non | Oui | Oui | — |
| Renommage d'une table | Non | Non | Non | Non | — |
| Modification du jeu de caractères par défaut | Non | Non | Oui | Oui | — |
| Conversion du jeu de caractères | Non | Oui | Oui | Oui | — |
| Troncature d'une table sans GSI (TRUNCATE TABLE WITHOUT GSI) | Non | Non | Oui | Non | — |
| Troncature d'une table avec GSI (TRUNCATE TABLE WITH GSI) | Oui | Non | Oui | Non | — |
Opérations sur les partitions
Les fonctionnalités Online DDL de ce tableau s'appliquent à la fois aux groupes de tables et aux tables.
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Migration d'une partition | Oui | Non | Oui (partitions concernées uniquement) | Oui | Oui* |
| Scission d'une partition | Oui | Non | Oui (partitions concernées uniquement) | Oui | |
| Fusion de partitions | Oui | Non | Oui (partitions concernées uniquement) | Oui | Non |
| Ajout d'une partition | Oui | Non | Non | Non† | — |
| Suppression d'une partition | Oui | Non | Non | Non‡ | — |
| Réorganisation de partitions | Oui | Non | Oui (partitions concernées uniquement) | Oui | Non |
| Vidage d'une partition | Oui | Non | Non | Non | — |
| Renommage d'une partition | Oui | Non | Non | Non | — |
| Modification d'une partition | Oui | Non | Oui (partitions concernées uniquement) | Oui | Non |
\* Conditions de la multi-écriture asynchrone pour la migration de partition :
Tables logiques et GSI avec clé primaire explicite ou implicite : pris en charge.
Index secondaires globalement uniques (sans clé primaire) : non pris en charge.
† Comportement du rechargement lors de l'ajout d'une partition :
Table RANGE ou RANGE COLUMNS sans partition
MAXVALUE: aucun rechargement nécessaire. Sinon, les données de partitions spécifiques sont rechargées.Table LIST ou LIST COLUMNS sans partition
DEFAULT: aucun rechargement nécessaire. Sinon, les données de partitions spécifiques sont rechargées.
‡ Comportement du rechargement lors de la suppression d'une partition :
Table RANGE ou RANGE COLUMNS : aucun rechargement lors de la suppression de la dernière partition ; rechargement requis pour les autres partitions.
Table LIST ou LIST COLUMNS sans partition
DEFAULT: aucun rechargement nécessaire. Sinon, le rechargement est requis.
Opérations sur les séquences
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Création d'une séquence | Oui | Non | Non | Non | — |
| Suppression d'une séquence | Oui | Non | Non | Non | — |
| Modification des attributs d'une séquence | Oui | Non | Non | Non | — |
| Conversion du type de séquence | Oui | Non | Non | Non | — |
Opérations courantes sur les colonnes
Les opérations sur les colonnes se classent en trois catégories : les opérations courantes (sans lien avec la clé primaire, les clés de partitionnement ou les colonnes générées), les modifications de clés primaires et de partitionnement, et les opérations sur les colonnes générées. Exécutez SHOW FULL CREATE TABLE TABLE_NAME pour consulter tous les attributs des colonnes avant de déterminer la catégorie d'une opération.
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Ajout d'une colonne (voir Note 1) | Non | Non | Oui | Oui | — |
| Suppression d'une colonne | Non | Non | Oui | Oui | — |
| Renommage d'une colonne | Non | Non | Non | Non | — |
| Modification de l'ordre des colonnes | Non | Non | Oui | Oui | — |
| Modification de la valeur par défaut d'une colonne | Non | Non | Non | Non | — |
| Suppression de la valeur par défaut d'une colonne | Non | Non | Non | Non | — |
| Modification du type de données d'une colonne | Non | Oui | Oui | Oui | — |
| Extension de la longueur d'une colonne VARCHAR (voir Note 2 et Note 3) | Non | Non | Non | Non | — |
| Extension de la longueur d'une colonne CHAR (voir Note 3) | Non | Oui | Oui | Oui | — |
| Passage d'une colonne à NULL | Non | Non | Oui | Oui | — |
| Passage d'une colonne à NOT NULL* | Non | Non | Oui | Oui | — |
\* Si SQL_MODE contient strict_trans_tables ou strict_all_tables, il s'agit d'une opération en ligne. Dans le cas contraire, l'algorithme COPY est utilisé, ce qui verrouille la table et copie les données.
Note 1 — Options d'algorithme pour l'ajout de colonne :
Lorsque ALGORITHM=INSTANT ou ALGORITHM=OMC est explicitement spécifié, le comportement change :
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Instant ADD COLUMN | Non | Non | Non | Non | — |
| Modification en ligne du type de colonne | Oui | Non | Oui | Oui | Oui |
Note 2 — Extension VARCHAR sur les nœuds de données 5,7 et 8,0 :
Les nœuds de données 5,7 prennent en charge l'extension de la longueur des colonnes VARCHAR avec l'algorithme INPLACE. Ce n'est pas le cas des nœuds 8,0.
La surcharge de stockage change à la limite de 256 octets : les colonnes de 255 octets ou moins utilisent 1 octet pour stocker la longueur, tandis que celles de 256 octets ou plus en utilisent 2. Étendre une colonne VARCHAR au-delà de cette limite nécessite plus qu'une simple modification des métadonnées.
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Extension de la longueur VARCHAR au-delà de 256 octets | Non | Non | Oui | Oui | — |
Note 3 — Extension CHAR sur les nœuds de données 5,7 et 8,0 :
Les nœuds de données 5,7 prennent en charge l'extension de la longueur des colonnes CHAR avec l'algorithme INPLACE. Ce n'est pas le cas des nœuds 8,0.
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Extension de la longueur d'une colonne CHAR | Non | Non | Oui | Oui | — |
Opérations sur les clés primaires et les colonnes de sharding
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Ajout d'une clé primaire | Oui | Non | Oui | Oui | Non |
| Suppression de la clé primaire d'origine et ajout d'une nouvelle clé primaire | Oui | Non | Oui | Oui | Non |
| Modification de la méthode de sharding, du nombre de shards ou des colonnes de sharding | Oui | Non | Oui (recréation du GSI ou de la table principale) | Oui | Non |
| Modification de la définition de la colonne de sharding d'un GSI ou de la table principale | Oui | Non | Oui (recréation du GSI ou de la table principale) | Oui | Non |
Opérations sur les colonnes générées
| Opération | Exécution logique | Verrouille la table | Reconstruit la table | Recharge les données | Multi-écriture asynchrone |
|---|---|---|---|---|---|
| Ajout d'une colonne virtuelle | Non | Non | Non | Non | — |
| Suppression d'une colonne virtuelle | Non | Non | Non | Non | — |
| Ajout d'une colonne stockée | Non | Oui | Oui | Oui | — |
| Suppression d'une colonne stockée | Non | Non | Oui | Oui | — |
| Ajout d'une colonne logique | Oui | Non | Oui | Oui | Non |
| Suppression d'une colonne logique | Oui | Non | Oui | Oui | — |
Contrôle du comportement d'exécution en ligne
PolarDB-X vous permet de contrôler directement l'algorithme d'exécution utilisé par une opération DDL :
Pour ajouter une colonne sans recharger les données, spécifiez
ALGORITHM=INSTANT. Cela utilise la fonctionnalité Instant ADD COLUMN, qui se termine en modifiant uniquement les métadonnées.Pour modifier une colonne en ligne sans verrouiller la table, spécifiez
ALGORITHM=OMC. Cela déclenche une exécution logique (modification de colonne en ligne).Les DDL exécutés logiquement s'effectuent en ligne par défaut, sans spécification particulière.
Pour exécuter en ligne des DDL physiques (opérations courantes sur les colonnes et index locaux), spécifiez
ALGORITHM=INPLACE. Si l'opération ne prend pas en charge l'exécution en ligne, une erreur est renvoyée. Dans le cas contraire, elle s'exécute directement.
Comportement attendu lors d'un DDL sur table volumineuse
Pour les opérations DDL qui rechargent des données — comme la création d'un GSI sur une grande table ou la scission d'une partition — tenez compte des points suivants :
Impact sur les performances DML pendant le rechargement : Pour les opérations DDL exécutées logiquement sans prise en charge de la multi-écriture asynchrone, les DML en ligne s'exécutent comme des opérations logiques jusqu'à la fin du rechargement. Planifiez si possible les DDL sur tables volumineuses durant les périodes de faible trafic.
Consommation de ressources : Le rechargement copie les données vers de nouveaux index. Le temps d'exécution dépend du volume de données, de la concurrence et des spécifications de l'instance.
Accessibilité maintenue de la table : Le Online DDL ne bloque les DML que pendant quelques secondes lors du basculement final. Votre application peut continuer à lire et écrire tout au long de l'opération.