Todos los productos
Search
Centro de documentos

PolarDB:Replicación asíncrona de bloqueos de metadatos

Última actualización: Sep 09, 2026

Cuando se ejecuta una operación DDL en el nodo primario, este retiene un bloqueo de metadatos (MDL). Los nodos de solo lectura deben esperar a que se sincronice esa información de bloqueo antes de reanudar el análisis sintáctico de los registros redo. Esto provoca que las operaciones DDL se detengan. La replicación asíncrona de MDL desacopla la sincronización de MDL del análisis sintáctico de los registros redo. De esta forma, los nodos de solo lectura continúan aplicando los registros redo mientras esperan la información del bloqueo, lo que reduce el impacto de las operaciones DDL en el rendimiento del clúster.

Versiones compatibles

Versión

Revisión mínima

PolarDB for MySQL 5.6

Todas las versiones de revisión

PolarDB for MySQL 5.7

Todas las versiones de revisión

PolarDB for MySQL 8.0

8.0.1.1.10 o posterior

Para comprobar la versión de su clúster, consulte Query the engine version.

Funcionamiento

Sin la replicación asíncrona de MDL, la sincronización de MDL y el análisis sintáctico de los registros redo están acoplados en los nodos de solo lectura:

Nodo primario

Nodo de solo lectura

Ejecuta la operación DDL y adquiere el MDL

Recibe la señal para sincronizar el MDL

La operación DDL retiene el MDL

Espera a que finalice la sincronización del MDL

Detiene el análisis sintáctico de los registros redo durante la espera

Finaliza la operación DDL y libera el MDL

Finaliza la sincronización del MDL y reanuda el análisis sintáctico de los registros redo

Con la replicación asíncrona de MDL, el nodo de solo lectura desacopla estas dos operaciones. Continúa analizando y aplicando los registros redo en segundo plano, mientras un hilo de trabajo dedicado gestiona la sincronización de MDL en paralelo.

Supervisión de la sincronización de MDL

Esta función se habilita de forma predeterminada en los clústeres compatibles. No se requiere ninguna configuración.

Dos vistas de INFORMATION_SCHEMA le permiten consultar el estado de la sincronización de MDL en un nodo de solo lectura.

Ambas consultas requieren las siguientes versiones de revisión mínimas. Si su clúster no cumple estos requisitos, upgrade the cluster version .
MySQL 8.0.1: revisión 8.0.1.1.24 o posterior
MySQL 5.7: revisión 5.7.1.0.20 o posterior
MySQL 5.6: revisión 5.6.1.0.33 o posterior Para ejecutar una consulta en un nodo específico, consulte la sección "Hint" de Descripción general .

Consulta del estado de las ranuras de MDL

Ejecute la siguiente instrucción en un nodo de solo lectura para consultar todas las ranuras activas de sincronización de MDL:

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOG_MDL_SLOT;

Salida de ejemplo:

+---------+------------+-------------------+----------+-------------------+
| slot_id | slot_state | slot_name         | slot_lsn | thread_id         |
+---------+------------+-------------------+----------+-------------------+
|       0 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       1 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       2 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       3 | SLOT_NONE  | no targeted table |        0 | no running thread |
|       4 | SLOT_NONE  | no targeted table |        0 | no running thread |
+---------+------------+-------------------+----------+-------------------+

Cada fila representa una ranura de sincronización de MDL. La columna slot_name identifica la tabla de destino y slot_state muestra la fase actual de sincronización:

**slot_state**

Significado

SLOT_NONE

Estado de inicialización. No hay ninguna solicitud de MDL activa.

SLOT_RESERVED

El nodo de solo lectura recibió una solicitud de MDL y espera un hilo de trabajo del programador.

SLOT_ACQUIRING

Se asignó un hilo de trabajo y el nodo de solo lectura está enviando la solicitud de MDL. Si otra conexión retiene el MDL, la ranura permanece en este estado hasta que se libere el bloqueo.

SLOT_LOCKED

El MDL se adquirió y el nodo de solo lectura lo retiene.

SLOT_RELEASING

El nodo de solo lectura recibió una solicitud de liberación de MDL y espera un hilo de trabajo del programador.

Diagnóstico de una espera de bloqueo: si una ranura se queda atascada en SLOT_ACQUIRING, es probable que el nodo de solo lectura esté esperando un MDL retenido por otra conexión. Use la consulta de hilos de trabajo que se muestra a continuación para confirmarlo. Después, compruebe si alguna conexión del nodo primario retiene un bloqueo en la tabla indicada en slot_name.

Consulta del estado de los hilos de trabajo

Ejecute la siguiente instrucción en un nodo de solo lectura para consultar los hilos de trabajo que procesan las solicitudes de sincronización de MDL:

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOG_MDL_THREAD;

Salida de ejemplo:

+-----------+-----------+------------------+-------------------+----------+
| thread_id | thr_state | slot_state       | slot_name         | slot_lsn |
+-----------+-----------+------------------+-------------------+----------+
|         0 | free      | not in acquiring | no targeted table |        0 |
|         1 | free      | not in acquiring | no targeted table |        0 |
|         2 | free      | not in acquiring | no targeted table |        0 |
|         3 | free      | not in acquiring | no targeted table |        0 |
+-----------+-----------+------------------+-------------------+----------+

Si INNODB_LOG_MDL_SLOT muestra una ranura en SLOT_ACQUIRING y el hilo de trabajo correspondiente en INNODB_LOG_MDL_THREAD tiene un valor de thr_state distinto de free, es muy probable que el nodo de solo lectura esté esperando un MDL. Compruebe si alguna conexión del nodo primario retiene un bloqueo en la tabla indicada en slot_name.

Contacto

Si tiene dudas sobre las operaciones DDL, contáctenos.

Contacto

Si tiene dudas sobre las operaciones DDL, Contact us.