Método de cálculo de segundos de retardo maestro-esclavo de MySQL_Behind_Master
Problemas con este método de cálculo:
1. En primer lugar, este método de cálculo en sí es incorrecto. Si hay un problema con la hora local, no permitirá el uso de. marcas de tiempo de eventos, por lo que se produjo un error, por lo que la diferencia de tiempo entre la estación maestra actual y la estación esclava se registrará en la fórmula durante el cálculo
La fórmula es la siguiente:
Nota : La diferencia horaria solo se calcula cuando se inicia el subproceso maestro-esclavo una vez, por lo que si la hora local maestro-esclavo es incorrecta después de iniciar el subproceso esclavo, Seconds_Behind_Master es incorrecto y el subproceso de replicación debe reiniciarse para volver a calcular el local maestro-esclavo. diferencia horaria (si el resultado es negativo, se restablecerá a cero)
Por ejemplo, cuando se inicia el hilo maestro-esclavo, la diferencia horaria local maestro-esclavo es incorrecta.
2. Si el subproceso IO se retrasa, este valor es inexacto y Seconds_Behind_Master puede mostrarse como 0, pero de hecho hay un retraso entre los repositorios maestro y esclavo, lo que es propenso a errores
Consejos: Por lo tanto, no está permitido monitorear la latencia de replicación solo a través de este valor, y la hora actual generalmente debe determinarse en combinación con la marca de tiempo de la tabla de latidos.
Cada vez que se muestra el estado del esclavo, hacemos el cálculo.
El código fuente es el siguiente:
Aquí puedes ver si el hilo SQL aplicó todo. los eventos o no
Nota: Si el subproceso IO se retrasa, entonces no es necesario utilizar el subproceso IO para copiar. Si el subproceso IO se retrasa, aún se retrasa incluso si Seconds_Behind_Master=0
Explicación de palabras clave
El cálculo de last_master_timestamp difiere entre replicación de un solo subproceso y replicación paralela
Los eventos se calculan de manera diferente a last_master_timestamp, y el cálculo de last_master_timestamp difiere entre la replicación de un solo subproceso y la replicación paralela.
ev->when.tv_sec representa la hora de inicio del evento. exec_time se refiere al tiempo de ejecución del evento en el servidor principal. Solo GTID_EVENT y XID_EVENT calcularán exec_time
Resumen: el tiempo del evento de la transacción es la marca de tiempo del inicio de la transacción. calculará exec_time
Resumen: la hora del evento es la marca de tiempo en la que comenzó la transacción. Resumen: el tiempo del evento en la ejecución de la transacción es la marca de tiempo del inicio de la transacción, y GTID_EVENT y XID_EVENT son el momento del envío de la transacción, por lo que si hay una transacción que no se ha enviado durante mucho tiempo, el retraso aumentará repentinamente y luego volverse normal
Primero, primero, echemos un vistazo al flujo del proceso de replicación paralela
Esto conducirá a la diferencia en la latencia de replicación entre la replicación paralela y la replicación de un solo subproceso. es decir, la diferencia entre esclavo_checkpoint y replicación de un solo subproceso. La diferencia es esclavo_checkpoint_period + el tiempo de ejecución de la transacción en el repositorio en espera, por lo que a veces no hay retraso en la replicación de un solo subproceso, pero sí un ligero retraso al cambiar a replicación paralela.
Además, el El cálculo de la marca de tiempo de DDL es en realidad el tiempo de ejecución de la transacción + la hora de inicio de la transacción
Este artículo presenta principalmente el cálculo de second_behind_master en diferentes modos
Este artículo presenta principalmente el cálculo de second_behind_master en diferentes modos de cálculo. Dominar los métodos de cálculo en diferentes modos conducirá a una inexactitud de este parámetro en muchos casos. Por lo tanto, también se recomienda monitorear el retraso junto con la tabla de latidos para ser más preciso. Si hay una desviación, no dude en hacerlo. corrígelo en cualquier momento
El contenido de este artículo hace referencia a: