У меня есть большое производственное веб-приложение (Glassfish 3.1 + MySQL 5.5). Все таблицы - InnoDB. Один раз в течение нескольких дней приложение полностью зависает.
SHOW FULL PROCESSLIST
показывает много простых запросов вставки или обновления для разных таблиц, но все имеющие статус
Ожидание блокировки уровня таблицы
Примеры:
update user<br>
set user.hasnewmessages = NAME_CONST('in_flag',_binary'\0' COLLATE 'binary')
where user.id = NAME_CONST('in_uid',66381)
insert into exchanges_itempacks
set packid = NAME_CONST('in_packId',332149), type = NAME_CONST('in_type',1), itemid = NAME_CONST('in_itemId',23710872)
Запросы с самым длинным "временем" ждут блокировки на уровне таблицы. Пожалуйста, помогите выяснить, почему MySQL пытается получить блокировку уровня и что может блокировать все эти таблицы. Все статьи о блокировке InnoDB говорят, что этот движок не использует блокировку таблицы, если вы не заставляете это делать.
Мой my.cnf
имеет следующее:
innodb_flush_log_at_trx_commit = 0
innodb_support_xa = 0
innodb_locks_unsafe_for_binlog = 1
innodb_autoinc_lock_mode=2
Двоичный журнал отключен. У меня нет "LOCK TABLES" или других явных команд блокировки вообще. Транзакции READ_UNCOMMITED
.
SHOW ENGINE INNODB STATUS
вывод:
http://avatar-studio.ru:8080/ph/imonout.txt