Tous les produits
Search
Centre de documentation

PolarDB:EXPLAIN DDL

Dernière mise à jour :Aug 11, 2026

La commande EXPLAIN DDL permet de prévisualiser les caractéristiques d'exécution d'une instruction ALTER TABLE avant son exécution. Elle indique l'algorithme sélectionné par le moteur, la nécessité d'une reconstruction complète de la table, l'autorisation des opérations DML concurrentes et l'éventuel blocage par des transactions non validées. Utilisez ces informations pour évaluer l'impact métier et déterminer le moment et la méthode appropriés pour exécuter l'opération DDL.

Versions prises en charge

EXPLAIN DDL est disponible sur les versions suivantes :

  • PolarDB for MySQL 8.0.1, version de révision 8.0.1.1.49 ou ultérieure

  • PolarDB for MySQL 8.0.2, version de révision 8.0.2.2.27 ou ultérieure

Limites

  • Fonctionnalité prise en charge uniquement pour les tables utilisant le moteur de stockage InnoDB.

  • Aucune donnée réelle n'est modifiée lors de l'analyse.

  • Exécution possible sur le nœud principal comme sur les nœuds en lecture seule. Le champ Possible blocked MDLs signale les conflits de verrous potentiels sur le nœud courant uniquement.

Activation d'EXPLAIN DDL

EXPLAIN DDL est activé par défaut. Les paramètres suivants permettent de contrôler cette fonctionnalité. Pour les instructions de configuration, consultez Configurer les paramètres du cluster et des nœuds.

Paramètre Niveau Description Valeur par défaut
loose_polar_enable_explain_ddl Global Active ou désactive EXPLAIN DDL. Valeurs valides : ON, OFF. ON
loose_polar_max_collect_thd_num_in_explain_ddl Global Nombre maximal de threads susceptibles de bloquer les MDL à collecter. Valeurs valides : 1–512. 16

Syntaxe

{ EXPLAIN | DESCRIBE | DESC } ALTER TABLE ...

Champs de sortie

Quatre champs déterminent directement l'impact métier : Algorithm, Metadata Only, Rebuilt Table et Concurrent DML. Le champ Possible blocked MDLs sert à détecter les conflits de verrous actifs avant l'exécution.

Champ Description Valeurs
Error No Code d'erreur. La valeur 0 indique que l'instruction s'est exécutée avec succès. 0 (succès) ou un code d'erreur
Algorithm Algorithme utilisé par le moteur. INSTANT est le plus efficace ; COPY est le moins efficace et bloque les écritures. INSTANT, INPLACE, COPY, Unknown
Metadata Only Indique si l'opération modifie uniquement les métadonnées sans toucher aux données de la table. Ces opérations se terminent en quelques secondes, quelle que soit la taille de la table. Yes, No, Unknown
Rebuilt Table Précise si une reconstruction complète de la table est nécessaire. Cette opération peut être longue sur des tables volumineuses. Yes, No, Unknown
Parallel Support Indique la compatibilité de l'opération avec le DDL parallèle pour accélérer le traitement. Yes, Yes, But Not Enabled, Not Needed, No, Unknown
Parallel Degree Nombre de threads utilisés par l'opération DDL. La valeur -1 signifie inconnu. -1 (inconnu), 1–128
Concurrent DML Autorisation des opérations de lecture et d'écriture pendant l'exécution du DDL. Yes, No, Unknown
Possible blocked MDLs ID de processus des connexions ayant des transactions non validées susceptibles de bloquer le DDL. ID de processus séparés par des virgules, ou vide
Error Msg Message d'erreur correspondant au champ Error No. Chaîne de caractères
Suggest Info Suggestions d'optimisation, telles que l'activation du DDL parallèle ou la résolution de conflits de verrous. Chaîne de caractères
Statement Instruction DDL analysée. Instruction DDL

Classement de l'efficacité des algorithmes

Les trois algorithmes forment une hiérarchie d'efficacité. EXPLAIN DDL rapporte l'algorithme effectivement sélectionné par le moteur, c'est-à-dire le plus efficace parmi ceux pris en charge par l'opération :

Algorithme Reconstruction de table DML concurrent Efficacité
INSTANT Non Oui Maximale — exécution en quelques secondes
INPLACE Selon l'opération Oui Moyenne — peut prendre plusieurs minutes pour les grandes tables
COPY Oui Non Minimale — bloque les écritures ; à éviter aux heures de pointe

Référence des opérations

Ce tableau permet d'estimer l'impact métier avant d'exécuter EXPLAIN DDL sur une opération spécifique. Bien qu'il reflète le comportement typique, utilisez EXPLAIN DDL pour confirmer le résultat réel dans votre environnement.

Opération Algorithme Métadonnées uniquement Reconstruction de table DML concurrent Impact typique
Ajout d'une colonne INSTANT Oui Non Oui Exécution en quelques secondes ; impact minime
Renommage d'une table INPLACE Oui Non Oui Exécution rapide ; impact minime
Ajout d'un index secondaire INPLACE Non Non Oui Durée dépendante de la taille de la table ; faible impact
Reconstruction d'une table INPLACE Non Oui Oui Consommation importante de ressources ; à planifier hors heures de pointe
Modification d'un type de colonne COPY Non Oui Non Blocage des écritures ; à planifier hors heures de pointe

Exemples

Vérification des caractéristiques d'exécution

Les exemples suivants illustrent l'utilisation d'EXPLAIN DDL pour évaluer si une opération DDL affecte la disponibilité du service.

Tous les exemples utilisent la même table de test :

SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL,
  `b` char(1) DEFAULT NULL,
  `c` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

Ajout d'une colonne

EXPLAIN ALTER TABLE t1 ADD COLUMN d INT;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INSTANT
        Metadata Only: Yes
        Rebuilt table: No
     Parallel Support: Not Need
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info:
            Statement: EXPLAIN ALTER TABLE t1 ADD COLUMN d int
1 row in set (0.00 sec)

L'algorithme INSTANT modifie uniquement les métadonnées sans reconstruire la table et autorise les DML concurrents. Cette opération s'exécute en quelques secondes avec un impact métier minime.

Renommage d'une table

EXPLAIN ALTER TABLE t1 rename t1_rn;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: Yes
        Rebuilt table: No
     Parallel Support: Not Need
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info:
            Statement: EXPLAIN ALTER TABLE t1 rename t1_rn
1 row in set (0.01 sec)

L'algorithme INPLACE modifie uniquement les métadonnées sans reconstruire la table et autorise les DML concurrents. L'impact métier reste minime.

Modification d'un type de colonne

EXPLAIN ALTER TABLE t1 modify COLUMN a char(1);
*************************** 1. row ***************************
             Error No: 0
            Algorithm: COPY
        Metadata Only: No
        Rebuilt table: Yes
     Parallel Support: No
      Parallel Degree: 1
       Concurrent DML: No
Possible blocked MDLs:
            Error Msg:
         Suggest Info:
            Statement: EXPLAIN ALTER TABLE t1 modify COLUMN a char(1)
1 row in set (0.01 sec)

L'algorithme COPY nécessite une reconstruction complète de la table et bloque les DML concurrents. Cette opération a un impact métier significatif ; planifiez-la hors des heures de pointe.

Reconstruction d'une table

EXPLAIN ALTER TABLE t1 engine= innodb;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: Yes
     Parallel Support: Yes But Not Enable
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
            Statement: EXPLAIN ALTER TABLE t1 engine= innodb

L'algorithme INPLACE impose une reconstruction complète de la table mais autorise les DML concurrents. Bien que l'opération ne bloque ni les lectures ni les écritures, la reconstruction d'une table volumineuse consomme beaucoup de ressources ; planifiez-la donc hors des heures de pointe.

Le champ Suggest Info indique que le DDL parallèle peut accélérer cette opération. Consultez Vérifier la prise en charge du DDL parallèle pour plus de détails.

Vérification de la prise en charge du DDL parallèle

PolarDB for MySQL prend en charge le DDL parallèle pour accélérer les opérations DDL. Utilisez les champs Parallel Support et Parallel Degree pour déterminer si une opération donnée peut bénéficier du DDL parallèle.

  • Si Parallel Support affiche Yes, But Not Enabled, l'opération est compatible avec le DDL parallèle, mais la fonctionnalité n'est pas activée sur le cluster. Le champ Suggest Info affiche alors : This DDL operation could use Parallel DDL to speed up. Pour activer le DDL parallèle, consultez DDL parallèle.

  • Si Parallel Support affiche Yes, la fonctionnalité est activée et utilisée. EXPLAIN DDL recommande également un degré de parallélisme optimal basé sur la charge actuelle du cluster. Le champ Suggest Info affiche : This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8. Ajustez innodb_polar_parallel_ddl_threads selon la recommandation pour améliorer les performances.

Exemple : DDL parallèle désactivé

Vérifiez si le DDL parallèle est activé :

MySQL [test]> SHOW variables LIKE "%parallel_ddl_threads%";
+----------------------------------------------------+-------+
| Variable_name                                      | Value |
+----------------------------------------------------+-------+
| innodb_polar_innovate_default_parallel_ddl_threads | 1     |
| innodb_polar_parallel_ddl_threads                  | 1     |
+----------------------------------------------------+-------+
2 rows in set (0.03 sec)

Le DDL parallèle n'est pas activé. Exécutez EXPLAIN sur l'opération d'ajout d'index secondaire :

EXPLAIN ALTER TABLE t1 ADD index k_a(a);
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: No
     Parallel Support: Yes But Not Enable
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info: 1. This DDL operation could use Parallel DDL to speed up.
            Statement: EXPLAIN ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)

La valeur Parallel Support: Yes But Not Enabled signifie que l'opération peut utiliser le DDL parallèle, mais que la fonctionnalité n'est pas active. Activez le DDL parallèle pour accélérer l'exécution.

Exemple : DDL parallèle activé

Définissez le degré de parallélisme à 2 :

MySQL [test]> SET innodb_polar_parallel_ddl_threads = 2;
Query OK, 0 rows affected (0.00 sec)

Exécutez EXPLAIN sur la même opération d'ajout d'index secondaire :

EXPLAIN ALTER TABLE t1 ADD index k_a(a);
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: No
     Parallel Support: Yes
      Parallel Degree: 2
       Concurrent DML: Yes
Possible blocked MDLs:
            Error Msg:
         Suggest Info: 1. This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.
            Statement: explain ALTER TABLE t1 ADD index k_a(a)
1 row in set (0.01 sec)

Les valeurs Parallel Support: Yes et Parallel Degree: 2 confirment que l'opération utilise deux threads parallèles. Étant donné la faible charge actuelle du cluster, Suggest Info recommande d'augmenter le degré de parallélisme à 8 pour de meilleures performances.

Détection des blocages MDL

Des transactions non validées détenant un verrou de métadonnées (MDL) sur une table peuvent bloquer les opérations DDL sur cette même table. Dans les cas extrêmes, des blocages MDL non détectés entraînent une accumulation de connexions actives et une instabilité du cluster. Utilisez le champ Possible blocked MDLs pour identifier les connexions bloquantes avant d'exécuter le DDL.

En cas de blocage, Possible blocked MDLs liste les ID de processus des connexions ayant des transactions non validées. Terminez-les avec KILL ou KILL QUERY pour débloquer le DDL.

Exemple : détection d'un blocage MDL

Dans la connexion 1, démarrez une transaction sur t1 sans la valider :

MySQL [test]> begin;
Query OK, 0 rows affected (0.00 sec)

MySQL [test]> select * from t1;
Empty set (0.00 sec)

Dans la connexion 2, exécutez EXPLAIN DDL sur t1 :

EXPLAIN ALTER TABLE t1 engine= innodb;
*************************** 1. row ***************************
             Error No: 0
            Algorithm: INPLACE
        Metadata Only: No
        Rebuilt table: Yes
     Parallel Support: Yes But Not Enable
      Parallel Degree: 1
       Concurrent DML: Yes
Possible blocked MDLs: 18
            Error Msg:
         Suggest Info: 1. This DDL operation may be blocked by the threads listed under 'Possible blocked MDLs'.
2. This DDL operation could use Parallel DDL to speed up.
            Statement: EXPLAIN ALTER TABLE t1 engine= innodb

La valeur Possible blocked MDLs: 18 identifie que la connexion 18 possède une transaction non validée qui bloquera ce DDL. Exécutez KILL 18 ou KILL QUERY 18 pour la terminer avant de poursuivre.

Étapes suivantes