'显示引擎innodb状态'

时间:2018-05-04 07:30:48

标签: mysql mariadb deadlock database-deadlocks galera

我正在运行基于MariaDB 10.1.32的3个节点的MariaDB Galera集群。目前我已经获得了相当多的"死锁发现"在我的系统日志中这样的消息:

2018-05-04  9:21:33 140130671872768 [ERROR] mysqld: Deadlock found when trying to get lock; try restarting transaction

为了找到导致死锁的原因我运行"显示引擎innodb状态"但是" LATEST DETECTED DEADLOCK"仅包含过时的信息(根据时间戳):

------------------------
LATEST DETECTED DEADLOCK
------------------------
2018-04-28 21:21:08 7f71a9450b00
*** (1) TRANSACTION:
[...]

为什么日志中会报告死锁,但它们不会显示在"显示引擎innodb状态"

的输出中?

1 个答案:

答案 0 :(得分:1)

简短的回答是Galera可以抛出不是InnoDB死锁的死锁错误。

你在SHOW ENGINE INNODB STATUS;中唯一看到的是InnoDB死锁,其中同一服务器上的多个事务试图获得不兼容的锁。这些永远不会发生在事务提交中 - 它们总是比这更早,是InnoDB内置的悲观锁定的结果。它们只出现在发生它们的服务器上。

当跨多个服务器的事务试图提交冲突结果并且这些事务发生冲突时,Galera将引发死锁。如果您处于自动提交模式,这些会发生在事务提交或隐式提交中,这是Galera乐观锁定的结果。这些是对不同主人的写入之间的冲突。

http://galeracluster.com/documentation-webpages/dealingwithmultimasterconflicts.html