查看最近几个innodb死锁

gwg*_*ler 14 mysql innodb deadlock mysql-5.5

我看到我可以在 mysql/innodb 中查看最新的死锁,但是有没有办法查看过去的死锁?我们有两个僵局问题,一个很重要,另一个不重要。不太重要的僵局一天发生几次,因此它成为“最新”的僵局。

Rol*_*DBA 17

MySQL 5.5.30 中引入了一个设置:innodb_print_all_deadlocks

启用此选项后,有关 InnoDB 用户事务中所有死锁的信息将记录在 mysqld 错误日志中。否则,使用 SHOW ENGINE INNODB STATUS 命令,您只会看到有关最后一个死锁的信息。偶尔的 InnoDB 死锁不一定是问题,因为 InnoDB 会立即检测到该情况,并自动回滚其中一个事务。如果应用程序没有适当的错误处理逻辑来检测回滚并重试其操作,您可以使用此选项来解决死锁发生的原因。大量死锁可能表明需要重构对多个表发出 DML 或 SELECT ... FOR UPDATE 语句的事务,以便每个事务以相同的顺序访问表,从而避免死锁情况。

只需将此设置添加到 my.cnf

[mysqld]
innodb_print_all_deadlocks = 1
Run Code Online (Sandbox Code Playgroud)

或者

[mysqld]
innodb_print_all_deadlocks = on
Run Code Online (Sandbox Code Playgroud)

您不必重新启动 mysql。只需登录mysql并运行

mysql> SET GLOBAL innodb_print_all_deadlocks = 1;

or

mysql> SET GLOBAL innodb_print_all_deadlocks = 'ON';
Run Code Online (Sandbox Code Playgroud)

这个设置对我来说也是新的。

试一试,告诉我们你的想法!!!