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 MDLssignale 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 SupportafficheYes, 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 champSuggest Infoaffiche alors :This DDL operation could use Parallel DDL to speed up.Pour activer le DDL parallèle, consultez DDL parallèle.Si
Parallel SupportafficheYes, 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 champSuggest Infoaffiche :This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.Ajustezinnodb_polar_parallel_ddl_threadsselon 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.