Ver los últimos puntos muertos innodb

12

Veo que puedo ver el último punto muerto en mysql / innodb, pero ¿hay alguna manera de ver puntos muertos anteriores? Tenemos dos problemas de punto muerto, uno importante y el otro no. El punto muerto menos importante ocurre varias veces al día, por lo que se convierte en el "punto muerto" más reciente.

gwgeller
fuente

Respuestas:

15

Hay una configuración que se introdujo en MySQL 5.5.30: innodb_print_all_deadlocks

Cuando esta opción está habilitada, la información sobre todos los puntos muertos en las transacciones de usuario de InnoDB se registra en el registro de errores de mysqld. De lo contrario, verá información sobre el último punto muerto, utilizando el comando SHOW ENGINE INNODB STATUS. Un punto muerto ocasional de InnoDB no es necesariamente un problema, porque InnoDB detecta la condición inmediatamente y revierte una de las transacciones automáticamente. Puede usar esta opción para solucionar el problema de los puntos muertos si una aplicación no cuenta con la lógica de manejo de errores adecuada para detectar la reversión y volver a intentar su operación. Un gran número de puntos muertos podría indicar la necesidad de reestructurar las transacciones que emiten sentencias DML o SELECT ... FOR UPDATE para varias tablas, de modo que cada transacción acceda a las tablas en el mismo orden, evitando así la condición de punto muerto.

Simplemente agregue esta configuración a my.cnf

[mysqld]
innodb_print_all_deadlocks = 1

o

[mysqld]
innodb_print_all_deadlocks = on

No tiene que reiniciar mysql. Simplemente inicie sesión en mysql y ejecute

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';

Esta configuración también es nueva para mí.

¡Pruébalo y dinos todo lo que piensas!

RolandoMySQLDBA
fuente
Estamos ejecutando 5.5.34. ¿Hay alguna opción para nuestra versión?
gwgeller
Mi error. Está en 5.5 dev.mysql.com/doc/refman/5.5/en/… . Actualizaré mi respuesta.
RolandoMySQLDBA
Funciona como se anuncia, gracias! Cambié la configuración usando sql para no tener que reiniciar. Casualmente, se produjeron un par de puntos muertos menos graves que aparecieron en el registro de errores.
gwgeller
Establecer el valor en tiempo de ejecución no funciona para mí, no escribe nada en el registro de errores.
lapo
1
@Jordan AWS nunca entrega SUPER y lo mencioné hace 6 años: dba.stackexchange.com/questions/34525/… . Usan disparadores para asegurarse de que no puedas hackear mysql.usery correr FLUSH PRIVILEGES;.
RolandoMySQLDBA