Há uma configuração que foi introduzida no MySQL 5.5.30: innodb_print_all_deadlocks
Quando essa opção está ativada, as informações sobre todos os conflitos nas transações do usuário do InnoDB são registradas no log de erros do mysqld. Caso contrário, você verá informações apenas sobre o último impasse, usando o comando SHOW ENGINE INNODB STATUS. Um impasse ocasional do InnoDB não é necessariamente um problema, porque o InnoDB detecta a condição imediatamente e reverte uma das transações automaticamente. Você pode usar esta opção para solucionar os problemas dos bloqueios, se um aplicativo não tiver uma lógica de tratamento de erros apropriada para detectar a reversão e tentar novamente sua operação. Um grande número de deadlocks pode indicar a necessidade de reestruturar transações que emitem instruções DML ou SELECT ... FOR UPDATE para várias tabelas, para que cada transação acesse as tabelas na mesma ordem, evitando a condição de deadlock.
Basta adicionar essa configuração a my.cnf
[mysqld]
innodb_print_all_deadlocks = 1
ou
[mysqld]
innodb_print_all_deadlocks = on
Você não precisa reiniciar o mysql. Apenas entre no mysql e execute
mysql> SET GLOBAL innodb_print_all_deadlocks = 1;
or
mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Essa configuração também é nova para mim.
Experimente e nos diz tudo o que você pensa !!!