¿Cómo puedo solucionar el error «Esperando a que el hilo de SQL esclavo libere suficiente espacio para registros de retransmisión» en MySQL de Amazon Aurora?

5 minutos de lectura
0

En el resultado del comando SHOW SLAVE STATUS, que funciona como una réplica de la replicación de registros binarios en MySQL de Amazon Aurora, se muestra este error: «Esperando a que el hilo de SQL esclavo libere suficiente espacio para registros de retransmisión». ¿Cómo puedo solucionar este error?

Descripción corta

Si MySQL de Aurora es una réplica de la replicación de registros binarios, ejecuta el hilo E/S y el hilo de SQL de la misma manera que MySQL. El hilo de E/S lee los registros binarios del primario y, a continuación, los guarda como registros de retransmisión en la instancia de base de datos de réplica. El hilo SQL procesa los eventos de los registros de retransmisión y, a continuación, elimina los registros de retransmisión.

Si el hilo de SQL no procesa los eventos lo suficientemente rápido como para alcanzar la velocidad a la que se generan los registros de retransmisión, la cantidad de registros de retransmisión aumenta.

Si la variable global relay_log_space_limit está definida en un número superior a 0 y el tamaño total de todos los registros de retransmisión alcanza el límite, se dejarán de guardar los registros de retransmisión nuevos. Hasta que vuelva a haber espacio disponible para registros de retransmisión, el resultado de SHOW SLAVE STATUS muestra el mensaje «Esperando a que el hilo de SQL esclavo libere suficiente espacio para registros de retransmisión» en el campo Slave_IO_State.

En MySQL de Aurora, el valor de relay_log_space_limit está establecido en 1000000000 (953,6 MiB) y no se puede modificar. Esto evita que el volumen del clúster llegue a ser innecesariamente grande. Si el tamaño total de todos los registros de retransmisión alcanza los 1000000000 bytes (953,6 MiB), el hilo de E/S dejará de guardar los registros de retransmisión. Esperará a que el hilo SQL procese los eventos y elimine los registros existentes. A continuación, Slave_IO_State mostrará el mensaje «Esperando a que el hilo de SQL esclavo libere suficiente espacio para registros de retransmisión». Si el hilo de SQL no se detiene, los registros de retransmisión se eliminarán finalmente y el hilo de E/S continuará guardado los nuevos registros de retransmisión.

Esto también significa que existe un retraso en la replicación porque SQL no es lo suficientemente rápido como para ponerse al día con la generación de registros de retransmisión por parte del hilo de E/S. Aunque se aumente el valor de relay_log_space_limit, los registros de retransmisión se seguirán acumulando y el problema no se solucionará hasta que el hilo de SQL se ponga al día.

Puede ver el espacio actual para registros de retransmisión, el estado del hilo de E/S y el estado del hilo de SQL en el resultado del comando SHOW SLAVE STATUS.

Slave_IO_State: Waiting for the slave SQL thread to free enough relay log space
Master_Log_File: mysql-bin-changelog.237029
Read_Master_Log_Pos: 55356151
Relay_Master_Log_File: mysql-bin-changelog.237023
Exec_Master_Log_Pos: 120
Relay_Log_Space: 1000002403

Master_Log_File y Read_Master_Log_Pos muestran el nombre del archivo de registro binario y la posición en la que el hilo de E/S acabó de leer y guardar. Relay_Master_Log_File y Exec_Master_Log_Pos muestran el nombre del archivo de registro binario y la posición del procesamiento en la que se encuentra el hilo de SQL. Aunque lo que realmente lee el hilo de SQL son registros de retransmisión, se muestran la posición y el nombre del archivo de registro binario correspondiente en la instancia de base de datos principal.

Si Master_Log_File difiere de Relay_Master_Log_File, el hilo de SQL no es lo bastante rápido. Si Master_Log_File y Relay_Master_Log_File coinciden, el hilo de E/S podría estar contribuyendo al retraso.

Los siguientes factores pueden provocar un rendimiento insuficiente del hilo de SQL:

  • Consultas de ejecución prolongada en la instancia de base de datos principal
  • Almacenamiento o tamaño insuficientes de la clase de instancia de base de datos
  • Consultas paralelas realizadas en la instancia de base de datos principal
  • Registros binarios sincronizados con el disco de la instancia de base de datos de réplica
  • Binlog_format se ha definido como ROW en la instancia de base de datos de réplica

Para obtener más información sobre cómo solucionar estos problemas, consulte ¿Cómo puedo solucionar un retraso de réplica elevado con Amazon RDS para MySQL?

Además, los siguientes factores también pueden afectar al rendimiento del hilo de SQL:

  • Una longitud excesiva de la lista de historiales de transacciones (HLL) en la instancia de base de datos de réplica
  • Operaciones de E/S poco eficientes en la instancia de base de datos de réplica
  • Tablas con muchos índices secundarios en la instancia de base de datos de réplica

Solución

Mientras haya escritura en su réplica, no debe preocuparse por el espacio para registros de retransmisión. Para supervisarlo, puede utilizar la métrica Rendimiento de escritura en Monitoreo mejorado.

En su lugar, céntrese en solucionar los problemas de rendimiento de la réplica. Para obtener más información, consulte ¿Cómo puedo solucionar un retraso de réplica elevado con Amazon RDS para MySQL? y ¿Por qué la réplica de lectura de mi Amazon Aurora se ha retrasado y se ha reiniciado?


Información relacionada

Variables y opciones del servidor de réplica

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años