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 MDLsmuestra 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 |
|
|
Global |
Activa o desactiva EXPLAIN DDL. Valores válidos: |
|
|
|
Global |
Número máximo de subprocesos con posible bloqueo MDL que se recopilan. Valores válidos: 1–512. |
|
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 |
|
|
Código de error. El valor |
|
|
|
Algoritmo que utiliza el motor. INSTANT es el más eficiente; COPY es el menos eficiente y bloquea las escrituras. |
|
|
|
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. |
|
|
|
Indica si la operación requiere reconstruir por completo la tabla. Reconstruir una tabla grande consume mucho tiempo. |
|
|
|
Indica si la operación admite DDL paralelo para acelerar el proceso. |
|
|
|
Número de subprocesos que utiliza la operación DDL. El valor |
|
|
|
Indica si se permiten operaciones de lectura y escritura durante la ejecución de la instrucción DDL. |
|
|
|
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 |
|
|
Mensaje de error correspondiente a |
Una cadena |
|
|
Sugerencias de optimización, como habilitar DDL paralelo o resolver conflictos de bloqueo. |
Una cadena |
|
|
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 |
|
|
No |
Sí |
Máxima: termina en segundos |
|
|
Depende de la operación |
Sí |
Media: puede tardar minutos en tablas grandes |
|
|
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 SupportesYes, But Not Enabled, la operación admite DDL paralelo, pero la función no está habilitada en el clúster. El campoSuggest Infomuestra:This DDL operation could use Parallel DDL to speed up.Para habilitar el DDL paralelo, consulte Parallel DDL.Si
Parallel SupportesYes, 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 campoSuggest Infomuestra:This DDL operation can be accelerated by increasing the value of 'innodb_polar_parallel_ddl_threads'. The recommended value is 8.Ajusteinnodb_polar_parallel_ddl_threadssegú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.