Mariadb InnoDB死锁历史记录
代码更改后,我的数据库报告了大量死锁事件,这些事件在一段时间后(1Mariadb InnoDB死锁历史记录,mariadb,innodb,database-deadlocks,Mariadb,Innodb,Database Deadlocks,代码更改后,我的数据库报告了大量死锁事件,这些事件在一段时间后(1
SHOW ENGINE INNODB STATUS
查看发生的情况,但信息不正确:此处报告的语句和表与我在INNODB_LOCKS
表中看到的不同(尚未解决时)
问题是:我怎样才能得到一个历史记录,一个关于发生了什么死锁的日志?不仅仅是最近的一次
innodb_print_all_deadlocks = ON
显示发动机INNODB状态
为瞬态;上面的代码应该通过写入日志文件来持久化它
我推荐一些方法来减少死锁的数量:
- 在不同的交易中,做事的顺序是相同的。这包括触摸哪些行
- 加快代码速度。(更好的索引,通常是“复合”,重新格式化查询等)
- 查看是否可以合理地从
…BEGIN
中提取任何内容COMMIT
show CREATE TABLE
在任何情况下,在每个事务中测试错误,并准备在遇到死锁时重播
注意:lock\u wait\u timeout
是一个相关项。它默认为不合理的高50秒。如果你说你是在自找麻烦。减少它(比如说,5)不是一个真正的解决方案,但它可能以有趣的方式改变问题。再次测试错误并作出反应。点击这个“超时”和“死锁”一样糟糕。不点击它,而是等待,是InnoDB成功解决冲突的一种无声方式