2009-03-13 27 views
12

Sé que los bloqueos ocurren inevitablemente al usar transacciones en Innodb y que son inofensivos si el código de la aplicación los trata de manera adecuada: "simplemente pruébelo nuevamente", como dice el manual.Cómo detectar interbloqueos en Mysql/innodb?

Así que me preguntaba: ¿cómo se detectan interbloqueos? ¿Un punto muerto genera algún número de error mysql especial? Estoy usando la extensión mysqli de PHP si eso es importante.

Gracias.

Editar: solución encontrada, ver los comentarios

Respuesta

13

http://dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html

1213 (ER_LOCK_DEADLOCK)

Transacción punto muerto. Debería volver a ejecutar la transacción.

+0

¡Gracias! Eso es lo que estaba buscando. –

+1

@ El enlace de S.Lott está roto –

+0

@ S.Lott Google me llevó aquí ... un lugar extraño para decir tales cosas ^^ cuando este es un lugar para recopilar dicha información – OZZIE

5

Trate MaatKit. Tiene un registrador de interbloqueo.

+4

Maatkit ha sido absorbido por la [Percona Toolkit] (http://www.percona.com/software/percona-toolkit/) recientemente. La herramienta se llama [pt-deadlock-logger] (http://www.percona.com/doc/percona-toolkit/pt-deadlock-logger.html) y anteriormente era __mk-deadlock-logger__. – Mei

1

Pruebe innotop, detectará el punto muerto para usted.

14

"SHOW ENGINE INNODB STATUS" del cliente de la línea de comandos de MySQL (no un navegador de consultas) le dará información sobre interbloqueos.

Los bloqueos también pueden ser causados ​​por transacciones no confirmadas (generalmente errores del programa) y la persona que ejecuta la transacción no confirmada no verá el problema, ya que funcionarán correctamente (no se confirmarán sus datos).

+0

Esto solo mostrará el último punto muerto. – dr01

5

Intente utilizar MONyog. Active la opción "Monitoreo de interbloqueos" de MONyog para rastrear los interbloqueos informados por INNODB STATUS. MONyog enviará una alerta al usuario cuando ocurra un nuevo punto muerto. enter image description here

1

Si usted está en un Mac:

$ brebaje instalar Percona-toolkit

$ pt-estancamiento-logger -uroot --ask de paso localhost

Cuestiones relacionadas