我正在运行一个基于mariadb 10.1.32的带有3个节点的mariadb galera集群。目前,我在系统日志中收到了很多类似这样的“deadlock found”消息:
2018-05-04 9:21:33 140130671872768 [ERROR] mysqld: Deadlock found when trying to get lock; try restarting transaction
为了找到死锁的原因,我运行“show engine innodb status”,但是“latest detected deadlock”部分只包含过时的信息(根据时间戳):
------------------------
LATEST DETECTED DEADLOCK
------------------------
2018-04-28 21:21:08 7f71a9450b00
***(1) TRANSACTION:
[...]
为什么日志中报告了死锁,但在“show engine innodb status”的输出中没有显示?
1条答案
按热度按时间t1rydlwq1#
简而言之,galera可以抛出非innodb死锁的死锁错误。
你唯一能看到的
SHOW ENGINE INNODB STATUS;
innodb死锁,同一服务器上的多个事务试图获得不兼容的锁。这些问题在事务提交时从未出现过——它们总是比这更早出现,这是innodb内置的悲观锁定的结果。它们只出现在发生它们的服务器上。当跨多个服务器的事务试图提交冲突的结果,并且这些事务发生冲突时,galera将抛出死锁。由于galera的乐观锁定,在事务提交或隐式提交(如果处于autocommit模式)时会发生这些错误。这些是对不同主机的写入之间的冲突。
http://galeracluster.com/documentation-webpages/dealingwithmultimasterconflicts.html