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
我认为在某些情况下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
只是一些想法...