cake_session 1213:尝试获取锁定时发现死锁;尝试重新启动事务


cake_session 1213: Deadlock found when trying to get lock; try restarting transaction

我使用 Percona(3 个主-主同步节点,使用 galera 负载均衡器)迁移到 SQL 集群环境,并将所有数据库转换为 InnoDB。 我们现在在我们的 CakePHP 1.3 应用程序中不断得到这个。

2013-09-11 09:16:52 Sql_errors: 会话错误: (1213: 发现死锁 试图锁定时;尝试重新启动交易) - 文件:/蛋糕/libs/cake_session.php - 行:759

2013-09-11 09:16:52 Sql_errors: 会话错误: (1213: 发现死锁 试图锁定时;尝试重新启动交易) - 文件:/蛋糕/libs/cake_session.php - 行:759

2013-09-11 10:54:49 Sql_errors: 会话错误: (1213: 发现死锁 试图锁定时;尝试重新启动交易) - 文件:/蛋糕/库/cake_session.php - 行:759

2013-09-11 11:36:36 Sql_errors: 会话错误: (1213: 发现死锁 试图锁定时;尝试重新启动交易) -

因为它是CakePHP核心的一部分,所以我有点厌倦了进行任何修改。我想知道是否有人曾经遇到过 CakePHP 这个问题,有什么建议可能有助于避免它?

有关此处发生的情况的全面说明,请参阅 Percona XtraDB 集群:多节点写入和意外死锁。

DR版本:

处理这个问题很简单,就是在具有乐观锁定的同步复制系统中进行多节点写入的权衡。

您可以做些什么来解决此问题? 以下是从最简单到最复杂的一些想法:

  • 仅写入群集中的单个节点(一次)

  • 更新应用程序数据库库以处理突然死锁

  • 重构应用程序/架构以避免数据热点