2016-08-19 3 views
1

У меня есть следующая архитектура:Load Balancer - Тайм-аут блокировки ожидания превышено - попробуйте перезапустить транзакцию

1 Load балансира

3 Amazon EC 2 экземпляра (лампы, с 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 

Я предполагаю, что это происходит потому, что все экземпляры записывают в столбец сеансов в базе данных, что я могу сделать, чтобы избежать этой ошибки? И что именно теряется, когда эта ошибка срабатывает?

EDIT:

таблица Session выглядит следующим образом.

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; 
+0

что тип (MyISAM, InnoDB, память) таблицы сессий? –

+0

Тип таблицы сеансов: InnoDB –

+0

показать структуру и ключи таблицы сеансов, pls –

ответ

1

Как я знаю, что AWS балансировка нагрузки может быть настроена для перенаправления пользователя на тот же экземпляр ес, поэтому нет никаких оснований делиться сессиями.

Что касается хранения DB сессии попытаться установить другой режим блокировки PdoSessionHandler::LOCK_ADVISORY или PdoSessionHandler::LOCK_NONE

Или хранить сессии в memcache

Смежные вопросы

 Смежные вопросы