我有一个大的生产网络应用程序(Glassfish 3.1
MySQL 5.5).所有表都是InnoDB.每几天应用完全挂起.
SHOW FULL PROCESSLIST显示许多简单的插入或更新查询在不同的表,但都具有状态
SHOW FULL PROCESSLIST显示许多简单的插入或更新查询在不同的表,但都具有状态
Waiting for table level lock
例子:
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)
“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