MySQL InnoDB挂起等待表级锁

And*_*rey 10 java mysql innodb locking

我有一个大型的生产网络应用程序(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)
Run Code Online (Sandbox Code Playgroud)

具有最长"时间"的查询也在等待表级锁定.请帮助弄清楚为什么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
Run Code Online (Sandbox Code Playgroud)

二进制日志已关闭.我根本没有"LOCK TABLES"或其他显式锁定命令.交易是READ_UNCOMMITED.

SHOW ENGINE INNODB STATUS输出:http://avatar-studio.ru: 8080 /ph /imonout.txt

Fab*_*ney 1

我认为在某些情况下MySQL会进行全表锁定(即使用auto-inc)。我找到了一个可以帮助您的链接:http ://mysqldatabaseadministration.blogspot.com/2007/06/innodb-table-locks.html

还要查看所有 con 的提交/回滚和关闭的 java 持久性代码。(始终在finally块中关闭。)

尝试innodb_table_locks=0在 MySQL 配置中进行设置。 http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_table_locks

只是一些想法...