负载均衡器 - 超出锁定等待超时 - 尝试重新启动事务
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_ADVISORY
或PdoSessionHandler::LOCK_NONE
或将会话存储在memcache
我有以下架构:
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_ADVISORY
或PdoSessionHandler::LOCK_NONE
或将会话存储在memcache