Mariadb InnoDB死锁历史记录

Mariadb InnoDB死锁历史记录,mariadb,innodb,database-deadlocks,Mariadb,Innodb,Database Deadlocks,代码更改后,我的数据库报告了大量死锁事件,这些事件在一段时间后(1

代码更改后,我的数据库报告了大量死锁事件,这些事件在一段时间后(1SHOW ENGINE INNODB STATUS查看发生的情况,但信息不正确:此处报告的语句和表与我在
INNODB_LOCKS
表中看到的不同(尚未解决时)

问题是:我怎样才能得到一个历史记录,一个关于发生了什么死锁的日志?不仅仅是最近的一次

innodb_print_all_deadlocks = ON
显示发动机INNODB状态
为瞬态;上面的代码应该通过写入日志文件来持久化它

我推荐一些方法来减少死锁的数量:

  • 在不同的交易中,做事的顺序是相同的。这包括触摸哪些行
  • 加快代码速度。(更好的索引,通常是“复合”,重新格式化查询等)
  • 查看是否可以合理地从
    BEGIN
    COMMIT
    中提取任何内容
为了进一步讨论,请向我们展示事务中的SQL,以及相关表的
show CREATE TABLE

在任何情况下,在每个事务中测试错误,并准备在遇到死锁时重播

注意:
lock\u wait\u timeout
是一个相关项。它默认为不合理的高50秒。如果你说你是在自找麻烦。减少它(比如说,5)不是一个真正的解决方案,但它可能以有趣的方式改变问题。再次测试错误并作出反应。点击这个“超时”和“死锁”一样糟糕。不点击它,而是等待,是InnoDB成功解决冲突的一种无声方式