“show engine innodb status”中的过时死锁信息

j0pj023g  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(772)

我正在运行一个基于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”的输出中没有显示?

t1rydlwq

t1rydlwq1#

简而言之,galera可以抛出非innodb死锁的死锁错误。
你唯一能看到的 SHOW ENGINE INNODB STATUS; innodb死锁,同一服务器上的多个事务试图获得不兼容的锁。这些问题在事务提交时从未出现过——它们总是比这更早出现,这是innodb内置的悲观锁定的结果。它们只出现在发生它们的服务器上。
当跨多个服务器的事务试图提交冲突的结果,并且这些事务发生冲突时,galera将抛出死锁。由于galera的乐观锁定,在事务提交或隐式提交(如果处于autocommit模式)时会发生这些错误。这些是对不同主机的写入之间的冲突。
http://galeracluster.com/documentation-webpages/dealingwithmultimasterconflicts.html

相关问题