负载均衡器 - 超出锁定等待超时 - 尝试重新启动事务

Load Balancer - Lock wait timeout exceeded - try restarting transaction

我有以下架构:

1 个负载均衡器

3 个 Amazon EC 2 实例(LAMP,使用 Symfony2)

1 个 RDS 数据库

我最近设置了这个,因为单个实例的流量很大,我让 Symfony2 使用数据库进行会话,但现在我不断在日志文件中收到此错误:

Uncaught PHP Exception PDOException: "SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction" at /var/www/front/shared/vendor/symfony/symfony/src/Symfony/Component/HttpFoundation/Session/Storage/Handler/PdoSessionHandler.php line 513

我假设这是因为所有实例都在写入数据库中的会话列,我该怎么做才能避免这个错误?当这个错误发生时究竟丢失了什么?

编辑:

会话 table 看起来像这样。

CREATE TABLE `sessions` (
  `sess_id` VARBINARY(128) NOT NULL PRIMARY KEY,
  `sess_data` BLOB NOT NULL,
  `sess_time` INTEGER UNSIGNED NOT NULL,
  `sess_lifetime` MEDIUMINT NOT NULL
) COLLATE utf8_bin, ENGINE = InnoDB;

据我所知,aws 负载均衡器可以设置为将用户重定向到同一个 ec 实例,因此没有理由共享会话。

关于数据库会话存储尝试设置另一种锁定模式PdoSessionHandler::LOCK_ADVISORYPdoSessionHandler::LOCK_NONE

或将会话存储在memcache