У меня есть большое производственное веб-приложение (Glassfish 3.1 + MySQL 5.5). Все таблицы InnoDB. Раз в несколько дней приложение полностью зависает.
SHOW FULL PROCESSLIST
показывает множество простых запросов вставки или обновления в разных таблицах, но все они имеют статус
Ожидание блокировки уровня таблицы
Примеры:
update user
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)
Запросы с самым длинным «Time» ожидают блокировка на уровне таблицы тоже. Пожалуйста, помогите разобраться, почему 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