解决com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try
作者:互联网
问题:
com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred while applying a parameter map.
--- Check the ErpAfterSale.updateById-InlineParameterMap.
--- Check the statement (update failed).
--- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction
以上错误,导致大部分表后续无法更新,代码DLL操作进入排队,获取表(行)锁超时,导致SQL操作无效。
解决办法如下:
查询如下三张表:
select * from information_schema.innodb_trx;
select * from information_schema.innodb_locks;
select * from information_schema.innodb_lock_waits ;
1、从innodb_trx表找到trx_state一直处于“RUNNING”的记录,如图:
2、那么,怎么判断一直处于RUNNING呢?
(1)根据innodb_trx表的trx_started的时间值判断,距离当前时间越久,说明当前事务“阻塞”的越久。
(2)查询innodb_locks、innodb_lock_waits表,一般可以判断出那条“阻塞”事务的id--trx_id。
3、通过trx_id的从innodb_trx找到该事务对应的trx_mysql_thread_id,进入数据库所在服务器终端,kill -9 xx杀掉该进程。
通过以上步骤,最后数据的一切操作终于回归正常~
这是本人在生产过程中实际遇到的问题,并得到了解决,但具体产生的原因还未排查出来,希望各位大佬能给出产生的原因及规避的办法。
标签:MySQLTransactionRollbackException,jdbc,jdbc4,---,trx,innodb,mysql,com 来源: https://www.cnblogs.com/flying2me/p/16288353.html