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.

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!


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.