Estoy usando MySQL-5.1.50 con una configuración de replicación maestro-esclavo.
La mayoría de las veces el esclavo va a la zaga del maestro.
Cuando ejecuto show processlist;
, no hay consulta que tarde mucho tiempo. También lo habilité slow_log
. Sin embargo, no encuentra ninguna consulta de ejecución lenta.
El esclavo está continuamente alertando que la replicación está segundos por detrás del maestro. A veces, el tiempo de retraso aumenta.
¿Cómo diagnostico la causa del problema?
Necesito ayuda urgente, ya que este problema ha persistido durante los últimos 20 días.
mysql
replication
adeela sahar
fuente
fuente
Respuestas:
El Seconds_Behind_Master es realmente como ver el pasado a través del viaje en el tiempo.
Piénsalo de esta manera:
De la misma manera, parece que el Maestro está procesando muchas consultas al mismo tiempo.
Miras hacia atrás al Esclavo, corres
SHOW SLAVE STATUS\G
y dice 200 porSeconds_Behind_Master
. ¿Cómo se calcula ese número? Hora del reloj del esclavo (UNIX_TIMESTAMP (NOW ()) - TIMESTAMP de la consulta cuando se completó y se registró en el registro binario del maestro.Hay otra métrica para mirar además
Seconds_Behind_Master
. Esa métrica se llamaRelay_Log_Space
. Eso representa la suma de todos los bytes para todos los archivos de retransmisión en el esclavo. Por defecto, el registro de retransmisión individual más grande está limitado a 1 GB. SiRelay_Log_Space
es inferior a 1 GB, esto indica que muchas consultas de larga ejecución se ejecutan en el maestro en paralelo. Desafortunadamente, debido al subproceso SQL de Replication de naturaleza de subproceso único, las consultas se ejecutan una detrás de otra.Por ejemplo, suponga que tiene el siguiente escenario en el maestro:
Cuando el Esclavo lee esas consultas de su registro de retransmisión y las procesa una por una
Seconds_Behind_Master
Con respecto al registro lento, el valor predeterminado para long_query_time es de 10 segundos. Si todas sus consultas en los registros de retransmisión son inferiores a 10 segundos, nunca capturará nada en el Registro de consultas lentas.
Tengo las siguientes recomendaciones para los servidores Master y Slave.
Apr 26, 2012
: ¿El rendimiento de la CPU es relevante para un servidor de base de datos?Sep 20, 2011
: Multi núcleos y rendimiento MySQLSep 12, 2011
: ¿Es posible hacer que MySQL use más de un núcleo?May 26, 2011
: Acerca del rendimiento de las bases de datos de subprocesos simples o multiprocesosSeconds_Behind_Master
.MÁS RESOLUCIÓN DE PROBLEMAS
Si desea ver las consultas que causan el retraso de respuesta, haga lo siguiente:
SHOW SLAVE STATUS\G
Relay_Log_File
STOP SLAVE;
START SLAVE;
cd /var/lib/mysql
o donde se escriben los registros de retransmisiónPor ejemplo, vamos a hacer
SHOW SLAVE STATUS\G
Si corro
STOP SLAVE; START SLAVE;
, el registro de retransmisión se cierra y se abre uno nuevo. Sin embargo, tú quieresrelay-bin.000030
.Volcar el contenido de la siguiente manera:
Ahora puede ver las consultas que el Esclavo está tratando de procesar actualmente. Puede usar esas consultas como punto de partida para la optimización.
fuente
¿Qué formato de registro binario estás usando? ¿Estás usando ROW o STATEMENT?
"
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
"Si está utilizando ROW como formato binlog, asegúrese de que todas sus tablas tengan Clave primaria o única:
SELECT t.table_schema,t.table_name,engine FROM information_schema.tables t INNER JOIN information_schema .columns c on t.table_schema=c.table_schema and t.table_name=c.table_name and t.table_schema not in ('performance_schema','information_schema','mysql') GROUP BY t.table_schema,t.table_name HAVING sum(if(column_key in ('PRI','UNI'), 1,0)) =0;
Si ejecuta, por ejemplo, una declaración de eliminación en el maestro para eliminar 1 millón de registros en una tabla sin una PK o clave única, entonces solo se realizará una exploración completa de la tabla en el lado del maestro, que no es el caso en el esclavo.
Cuando se utiliza ROW binlog_format, MySQL escribe los cambios de las filas en los registros binarios (no como una declaración como STATEMENT binlog_format) y ese cambio se aplicará en el lado del esclavo fila por fila, lo que significa que se realizará un escaneo completo de 1 millón de tablas en el esclavo para reflejar solo una declaración de eliminación en el maestro y eso está causando un problema de retraso del esclavo.
fuente
El valor de segundos_detrás_master en SHOW SLAVE STATUS es la diferencia entre la hora del sistema en el maestro, que se almacenó cuando el evento se ejecutó originalmente y se registró en el registro binario ... y la hora del sistema en el esclavo cuando el evento se ejecuta allí.
Los segundos detrás del maestro darán valores incorrectos si los relojes de los dos sistemas no están sincronizados.
fuente