Todos los productos
Search
Centro de documentos

PolarDB:EXPLAIN DDL

Última actualización: Sep 05, 2026

EXPLAIN DDL le permite previsualizar las características de ejecución de una instrucción ALTER TABLE antes de ejecutarla. Esta función indica qué algoritmo selecciona el motor, si la operación requiere reconstruir por completo la tabla, si se admiten operaciones DML concurrentes y si alguna transacción sin confirmar la bloqueará. Utilice esta información para evaluar el impacto en el negocio y decidir cuándo y cómo ejecutar la instrucción DDL.

Versiones compatibles

EXPLAIN DDL está disponible en:

  • PolarDB for MySQL 8.0.1, versión de revisión 8.0.1.1.49 o posterior

  • PolarDB for MySQL 8.0.2, versión de revisión 8.0.2.2.27 o posterior

Limitaciones

  • Solo es compatible con tablas que usan el motor de almacenamiento InnoDB.

  • No modifica ningún dato real.

  • Se puede ejecutar tanto en el nodo principal como en los nodos de solo lectura. El campo Possible blocked MDLs muestra posibles conflictos de bloqueo únicamente en el nodo actual.

Habilitar EXPLAIN DDL

EXPLAIN DDL se habilita de forma predeterminada. Utilice a continuación los parámetros para controlar esta función. Para obtener instrucciones de configuración, consulte Configure cluster and node parameters.

Parámetro

Nivel

Descripción

Valor predeterminado

loose_polar_enable_explain_ddl

Global

Activa o desactiva EXPLAIN DDL. Valores válidos: ON, OFF.

ON

loose_polar_max_collect_thd_num_in_explain_ddl

Global

Número máximo de subprocesos con posible bloqueo MDL que se recopilan. Valores válidos: 1–512.

16

Sintaxis

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

Campos de salida

Cuatro campos determinan directamente el impacto en el negocio: Algorithm, Metadata Only, Rebuilt Table y Concurrent DML. Utilice Possible blocked MDLs para detectar conflictos de bloqueo activos antes de la ejecución.

Campo

Descripción

Valores

Error No

Código de error. El valor 0 significa que la instrucción se ejecutó correctamente.

0 (correcto) o un código de error

Algorithm

Algoritmo que utiliza el motor. INSTANT es el más eficiente; COPY es el menos eficiente y bloquea las escrituras.

INSTANT, INPLACE, COPY, Unknown

Metadata Only

Indica si la operación modifica solo metadatos y no los datos de la tabla. Las operaciones exclusivas de metadatos terminan en segundos, sin importar el tamaño de la tabla.

Yes, No, Unknown

Rebuilt Table

Indica si la operación requiere reconstruir por completo la tabla. Reconstruir una tabla grande consume mucho tiempo.

Yes, No, Unknown

Parallel Support

Indica si la operación admite DDL paralelo para acelerar el proceso.

Yes, Yes, But Not Enabled, Not Needed, No, Unknown

Parallel Degree

Número de subprocesos que utiliza la operación DDL. El valor -1 significa desconocido.

-1 (desconocido), 1–128

Concurrent DML

Indica si se permiten operaciones de lectura y escritura durante la ejecución de la instrucción DDL.

Yes, No, Unknown

Possible blocked MDLs

Identificadores de proceso de las conexiones con transacciones sin confirmar que podrían bloquear la instrucción DDL.

Identificadores de proceso separados por comas o vacío

Error Msg

Mensaje de error correspondiente a Error No.

Una cadena

Suggest Info

Sugerencias de optimización, como habilitar DDL paralelo o resolver conflictos de bloqueo.

Una cadena

Statement

Instrucción DDL que se analiza.

Una instrucción DDL

Orden de eficiencia de los algoritmos

Los tres algoritmos forman una jerarquía de eficiencia. EXPLAIN DDL reporta el algoritmo que realmente selecciona el motor, es decir, el más eficiente que admite la operación:

Algoritmo

Reconstrucción de tabla

DML concurrente

Eficiencia

INSTANT

No

Sí

Máxima: termina en segundos

INPLACE

Depende de la operación

Sí

Media: puede tardar minutos en tablas grandes

COPY

Sí

No

Mínima: bloquea las escrituras; evítelo en horas pico

Referencia de operaciones

Utilice esta tabla para estimar el impacto en el negocio antes de ejecutar EXPLAIN DDL en una operación específica. La tabla refleja el comportamiento habitual; use EXPLAIN DDL para confirmar el resultado real en su entorno.

Operación

Algoritmo

Solo metadatos

Reconstrucción de tabla

DML concurrente

Impacto habitual

Agregar una columna

INSTANT

Sí

No

Sí

Termina en segundos; impacto mínimo

Cambiar el nombre de una tabla

INPLACE

Sí

No

Sí

Termina rápido; impacto mínimo

Agregar un índice secundario

INPLACE

No

No

Sí

El tiempo depende del tamaño de la tabla; impacto bajo

Reconstruir una tabla

INPLACE

No

Sí

Sí

Consume recursos significativos; prográmelo fuera de horas pico

Modificar el tipo de una columna

COPY

No

Sí

No

Bloquea las escrituras; prográmelo fuera de horas pico

Ejemplos

Comprobar las características de ejecución

A continuación se muestran ejemplos sobre cómo usar EXPLAIN DDL para evaluar si una operación DDL afecta la disponibilidad del negocio.

Todos los ejemplos utilizan la misma tabla de prueba:

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)

Agregar una columna

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)

El algoritmo INSTANT modifica solo metadatos, no reconstruye la tabla y permite operaciones DML concurrentes. Esta operación termina en segundos y tiene un impacto mínimo en el negocio.

Cambiar el nombre de una tabla

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)

El algoritmo INPLACE modifica solo metadatos, no reconstruye la tabla y permite operaciones DML concurrentes. Esta operación tiene un impacto mínimo en el negocio.

Modificar el tipo de una columna

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)

El algoritmo COPY requiere reconstruir por completo la tabla y bloquea las operaciones DML concurrentes. Esta operación tiene un impacto significativo en el negocio, así que prográmela fuera de horas pico.

Reconstruir una tabla

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

El algoritmo INPLACE requiere reconstruir por completo la tabla, pero permite operaciones DML concurrentes. Aunque la operación no bloquea lecturas ni escrituras, reconstruir una tabla grande consume muchos recursos. Prográmela fuera de horas pico.

El campo Suggest Info indica que el DDL paralelo puede acelerar esta operación. Consulte Check parallel DDL support para obtener más detalles.

Comprobar la compatibilidad con DDL paralelo

PolarDB for MySQL admite DDL paralelo para acelerar las operaciones DDL. Utilice los campos Parallel Support y Parallel Degree para determinar si una operación puede aprovechar esta función.

  • Si Parallel Support es Yes, But Not Enabled, la operación admite DDL paralelo, pero la función no está habilitada en el clúster. El campo Suggest Info muestra: This DDL operation could use Parallel DDL to speed up. Para habilitar el DDL paralelo, consulte Parallel DDL.

  • Si Parallel Support es Yes, la función está habilitada y en uso. EXPLAIN DDL también recomienda un grado óptimo de paralelismo según la carga de trabajo actual del clúster. El campo Suggest Info muestra: This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8. Ajuste innodb_polar_parallel_ddl_threads según la recomendación para mejorar el rendimiento.

Ejemplo: DDL paralelo deshabilitado

Compruebe si el DDL paralelo está habilitado:

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)

El DDL paralelo no está habilitado. Analice con EXPLAIN la operación para agregar un índice secundario:

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)

Parallel Support: Yes But Not Enabled significa que la operación puede usar DDL paralelo, pero la función no está activa. Habilite el DDL paralelo para acelerarla.

Ejemplo: DDL paralelo habilitado

Establezca el grado de paralelismo en 2:

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

Analice con EXPLAIN la misma operación para agregar un índice secundario:

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)

Parallel Support: Yes y Parallel Degree: 2 confirman que la operación usa dos subprocesos paralelos. Como la carga de trabajo actual del clúster es baja, Suggest Info recomienda aumentar el grado de paralelismo a 8 para obtener un mejor rendimiento.

Detectar bloqueos MDL

Las operaciones DDL en una tabla pueden quedar bloqueadas por transacciones sin confirmar que mantienen un Metadata Lock (MDL) en esa misma tabla. En casos extremos, los bloqueos MDL no detectados provocan acumulación de conexiones activas e inestabilidad en el clúster. Utilice el campo Possible blocked MDLs para identificar las conexiones que generan bloqueos antes de ejecutar la instrucción DDL.

Cuando existe un bloqueo, Possible blocked MDLs enumera los identificadores de proceso de las conexiones con transacciones sin confirmar. Finalícelas con KILL o KILL QUERY para desbloquear la instrucción DDL.

Ejemplo: detección de un bloqueo MDL

En la conexión 1, inicie una transacción en t1 sin confirmarla:

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

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

En la conexión 2, ejecute EXPLAIN DDL en 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

Possible blocked MDLs: 18 indica que la conexión 18 tiene una transacción sin confirmar que bloqueará esta instrucción DDL. Ejecute KILL 18 o KILL QUERY 18 para finalizarla antes de continuar.

Pasos siguientes