【发布时间】:2018-08-07 12:46:51
【问题描述】:
我的应用程序使用主-主 Galera 复制设置在 Maria DB 上运行。
该应用程序可以处理死锁,但我一直在努力尽量减少在填满我的日志文件时发生的死锁。仍然有一个事务经常出现死锁,我不知道如何避免它。
该过程从一个表中删除一条记录,对其他表执行一些操作,然后最后将一条记录插入到原始表中。 交易大致如下所示:
1. DELETE FROM table_a WHERE `id` = 'Foo'
2. REPLACE INTO table_b ( ... )
3. UPDATE table_c SET ....
4. INSERT INTO table_a (id,...) VALUES ('Bar',...)
尽管重试事务会修复它,但最终插入经常会出现死锁。这种模式导致死锁的原因是什么?我能做些什么来减少这种情况的发生?
【问题讨论】:
-
请在innodb状态监视器中查看mariadb提供的关于死锁的信息。它告诉您哪些事务的哪些语句导致死锁以及这些语句设置的锁。
-
我已经启用了 innodb_status_output 和 innodb_status_output_locks 虽然 log_error 中配置的文件不存在。我会看看下一个死锁发生时会发生什么
-
SHOW ENGINE INNODB STATUS;是否说INSERT与INSERT冲突?
标签: mariadb deadlock database-deadlocks