sql >> Base de Datos >  >> RDS >> Mysql

Tutorial de MySQL:comprender los segundos detrás del valor maestro

En una configuración de replicación de hospedaje de MySQL, el parámetro Seconds_Behind_Master (SBM), como se muestra en el comando SHOW SLAVE STATUS, se usa comúnmente como una indicación del retraso de replicación actual del esclavo. . En esta publicación de blog, examinamos cómo comprender e interpretar este valor en diversas situaciones.

Posibles valores de  Segundos detrás del maestro

El valor de SBM, como se explica en la documentación de  MySQL, depende del estado del esclavo MySQL en general y de los estados del esclavo SQL_THREAD y IO_THREAD de MySQL en particular. Mientras IO_THREAD se conecta con el maestro y lee las actualizaciones, SQL_THREAD aplica estas actualizaciones en el esclavo. Examinemos los valores posibles de SBM durante diferentes estados del esclavo MySQL.

Cuando el valor de SBM es nulo

  • SBM siempre es NULL si su esclavo se detiene o si su subproceso SQL se detiene (o no se ejecuta).
  • SBM también será NULL si se detiene el subproceso de E/S, siempre que el subproceso de SQL ya haya procesado todos los eventos del registro de retransmisión. Una salida de muestra de SHOW SLAVE STATUS (recortada para mostrar solo los valores de interés) demuestra esto:

Slave_IO_State:

Host_maestro:172.19.0.13

Slave_IO_Running:No

Slave_SQL_Running:Sí

Seconds_Behind_Master:NULL

Master_UUID:23b326b1-a452-11e8-91ca-000d3a065e8e

Slave_SQL_Running_State:El esclavo ha leído todo el registro de retransmisión; esperando más actualizaciones

Conjunto_Gtid_recuperado:23b326b1-a452-11e8-91ca-000d3a065e8e:818-389213

Conjunto_Gtid_ejecutado:23b326b1-a452-11e8-91ca-000d3a065e8e:1-389213

Cuando el valor de SBM es cero o positivo

  • SBM reflejará un valor válido (>=0)  cuando el subproceso SQL esté procesando eventos de forma activa. Esto es cierto independientemente del estado del subproceso de E/S. Por ejemplo:

Slave_IO_State:

Host_maestro:172.19.0.13

Slave_IO_Running:No

Slave_SQL_Running:Sí

Seconds_Behind_Master:3399

Master_UUID:23b326b1-a452-11e8-91ca-000d3a065e8e

Slave_SQL_Running_State:esperando que los trabajadores esclavos procesen sus colas

Conjunto_Gtid_recuperado:23b326b1-a452-11e8-91ca-000d3a065e8e:818-389213

Conjunto_Gtid_ejecutado:23b326b1-a452-11e8-91ca-000d3a065e8e:1-118774

En el ejemplo anterior, podemos ver que el esclavo está detrás del maestro comparando el conjunto_GTID_recuperado y el conjunto_GTID_ejecutado. En tales casos, Seconds_Behind_Master representará la diferencia entre la marca de tiempo de la última transacción procesada por SQL Thread y la marca de tiempo de la misma transacción cuando se procesó en el maestro. Esta marca de tiempo de transacción del maestro se conserva a través de la replicación y, por lo tanto, el esclavo podrá calcular el SBM localmente.

Además, una vez que el esclavo alcance completamente todos los registros de retransmisión (es decir, el GTID ejecutado se convierte en 23b326b1-a452-11e8-91ca-000d3a065e8e:1-389213/), Seconds_Behind_Master cambie a '0' si el subproceso de E/S se está ejecutando, o a 'NULL' si el subproceso de E/S no se está ejecutando.

#Tutorial de MySQL:comprender los segundos detrás del valor maestroHaga clic para twittear

Comprender la velocidad de ejecución del esclavo MySQL

Suponiendo que el subproceso SQL y el subproceso IO en el esclavo están en estado de ejecución, es posible comprender las velocidades de ejecución relativas del maestro y el esclavo al monitorear el valor de SBM. Un valor '0' consistente o un valor constante indica que el esclavo se está ejecutando a la misma velocidad que el maestro. Por otro lado, una pendiente ascendente para Seconds_Behind_Master indica que el esclavo está funcionando más lento que el maestro.

Monitoring Console for MySQL on Azure de ScaleGrid traza los valores de SBM a lo largo del tiempo para los nodos esclavos.

Valor cero o constante de SBM

En el ejemplo anterior, el esclavo se inició unas 40 horas después de que el maestro tuviera escrituras activas. Una vez iniciado, el esclavo comenzó a replicar esos datos, y vemos que el SBM era bastante plano, lo que indica que el esclavo se ejecutó a la misma velocidad que el maestro. También tenga en cuenta que la caída de SBM a '0' es abrupta, lo que realmente significa que aunque la última transacción que ejecutó el esclavo se ejecutó unas 40 horas antes en el maestro, una vez que nos hayamos puesto al día, hay un retraso de '0'.

Valores crecientes de SBM

En el siguiente gráfico, podemos ver que SBM aumenta constantemente, lo que significa que la velocidad de ejecución del esclavo es menor en comparación con la del maestro. En realidad, este es un caso en el que estamos ejecutando 20 subprocesos que realizan escrituras continuas en el maestro y un esclavo de un solo subproceso no puede seguir el ritmo.

Por último, es importante tener en cuenta que en nuestras discusiones hasta ahora, no hemos asumido ningún cuello de botella en la red. En el caso de redes lentas, el subproceso de E/S del esclavo se retrasará respecto del maestro, y si el subproceso de SQL es lo suficientemente rápido, el SBM oscilará entre '0' y un número positivo. En tales casos, SBM no será un parámetro útil para comprender el retraso real con el maestro.

Si disfrutó de esta publicación de blog, consulte nuestros otros tutoriales populares de administración de bases de datos MySQL para obtener más información sobre cómo optimizar sus implementaciones:

  • Cálculo del tamaño del grupo de búfer de InnoDB para su servidor MySQL
  • Tutorial de MySQL:configuración y administración de SSL en su servidor MySQL
  • Explicación del marco de alta disponibilidad de MySQL - Parte I:Introducción