数据库
首页 > 数据库> > 解决com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Lock wait timeout exceeded; try

解决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