У меня есть собственный session.set_save_handler для обработки сеансов на основе базы данных для моего приложения. Таблица базы данных имеет тип innodb. Я вижу некоторые ошибки в моем файле журнала типа (1205) Lock wait timeout exceeded; try restarting transaction
с несколькими потоками, в которых приложение зависает.
Кроме того, у меня есть класс, который содержит обратные вызовы обработчика сеанса и сделал его одноэлементным классом:
session_set_save_handler(
array($this, "db_open"),
array($this, "db_close"),
array($this, "db_read"),
array($this, "db_write"),
array($this, "db_destroy"),
array($this, "db_gc")
);
В методе "db_open" я установил для autocommit значение false.
В методе "db_read" я делаю SELECT FOR UPDATE
в строке с идентификатором сеанса. Итак, во время выполнения нагрузочного тестирования моего приложения. у меня также есть много вызовов ajax, делающих обновления базы данных, я заметил lock wait timeout
ошибки.
В методе "db_write" я делаю явный "коммит" или "откат".
Как мне решить эту проблему? Есть предложения?
- Должен ли я отлавливать эти ошибки и выдавать явный «коммит» в
читать или писать методы, чтобы снять блокировки и повторить попытку?
- Должен ли я указать более высокое значение времени ожидания
для "innodb_lock_wait_timeout"
Спасибо