Para implementar replicación concurrente en MySQL 5.7 y abordar problemas de retraso, se utiliza el modo de reloj lógico mediante el parámetro slave-parallel-type=LOGICAL_CLOCK. Esta configuración permite que transacciones con dependencias parciales se ejecuten en paralelo en el servidor esclavo, mejorando el rendimiento de replicación.
En vresiones anteriores a 5.7.19, existían fallos que podían causar inconsistencias cuando el maestro registraba valores de last_committed incorrectos en el registro binario. La versión 5.7.19 corrigió estos problemas, garantizando una ejecución paralela más confiable.
El número de hilos de trabajo para la replicación se define con slave-parallel-workers. Por ejemplo, establecerlo en 4 permite hasta cuatro transacciones simultáneas. Si no se requiere paralelismo, se debe configurar a 0; usar 1 puede ocasionar un rendimiento inferior.
Al consultar el proceso de replicación con SHOW PROCESSLIST, se observan múltiples hilos en estado de espera, lo que indica que están listos para recibir eventos del coordinador de replicación.
mysql> SHOW PROCESSLIST;
+----+-------------+-----------+------+---------+--------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+--------+--------------------------------------------------------+------------------+
| 15 | replica_user| | NULL | Connect | 450000 | Slave has read all relay log; waiting for more updates | NULL |
| 16 | replica_user| | NULL | Connect | 450000 | Waiting for an event from Coordinator | NULL |
| 17 | replica_user| | NULL | Connect | 450000 | Waiting for an event from Coordinator | NULL |
| 18 | replica_user| | NULL | Connect | 450000 | Waiting for an event from Coordinator | NULL |
| 19 | replica_user| | NULL | Connect | 450000 | Waiting for an event from Coordinator | NULL |
| 25 | replica_user| | NULL | Connect | 450000 | Waiting for master to send event | NULL |
| 30 | dbadmin | localhost | NULL | Query | 0 | starting | show processlist |
+----+-------------+-----------+------+---------+--------+--------------------------------------------------------+------------------+
En el registro binario, se incluyen los campos last_committed y sequence_number. Las transacciones con el mismo valor en last_committed forman un grupo que puede aplicarse en paralelo en el esclavo, ya que se consideran independientes entre sí.
#230515 14:30:22 server id 200 end_log_pos 3200000 CRC32 0x7a8b9c0d GTID last_committed=500 sequence_number=501
#230515 14:30:22 server id 200 end_log_pos 3205000 CRC32 0x1e2f3a4b GTID last_committed=500 sequence_number=502
Configuraciones adicionales como master_info_repository=TABLE, relay_log_info_repository=TABLE y relay_log_recovery=ON son esenciales para almacenar metadatos de replicación de manera persistente y recuperarse de fallos.