解决Lock wait timeout exceeded; try restarting transaction问题

1 问题
mysql数据库修改某条记录的时候出现报错:
org.springframework.dao.CannotAcquireLockException:

Error updating database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction

The error may involve com.*.dao.mapper.PhoneFlowMapper.updateByPrimaryKeySelective-Inline

The error occurred while setting parameters

在高并发的情况下,Spring事物造成mysql数据库事务未提交产生死锁,后续操作超时抛出异常。
mysql数据库采用InnoDB模式,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错。

3 解决方法

通过以下语句查询出未提交的事务,然后kill掉事务
select * from information_schema.innodb_trx
kill 26060

首先执行:

show full processlist; //列出当前的操作process,一般会看到很多waiting的process,说明已经有卡住的proces了,我们要杀死这些process!!

kill processid; //processid表示process的id,比如kill 3301,就会将id为3301的process杀死。

使用 kill 将所有的 id 杀死。然后重启MySQL,一般就会解决了。如果还不行,那应该是不可能的吧。。。

解决Lock wait timeout exceeded; try restarting transaction问题1 问题mysql数据库修改某条记录的时候出现报错:org.springframework.dao.CannotAcquireLockException:Error updating database. Cause: java.sql.SQLException: Lock ... public vo id shutdownJob() { Set<String> jobNames = jobOperator.getJobNames(); for (String jobName : jobNames) { Set<Long> execution Id s = j
Caused by: com. mysql .jdbc.exceptions.jdbc4. MySQL TransactionRollbackException: Lock wait timeout exceeded; try restarting transaction (errno: 11 "Resource temporarily unavailable rx_state状态为RUNNING就表示这个事物还在运行中,没有提交。LOCK_WAIT就是被阻塞了,需要等前面RUNNING的提交了才能到自己这边运行。
java.lang.Exception: ### Error updating database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction 原因分析: 执行update sql语句 发生 "LOCK...
CSDN-Ada助手: 非常感谢CSDN博主分享的“Swing实现Excel文件的处理”技术文章,我觉得这篇博客非常实用,对其他用户也会有很大帮助。建议下一篇博客可以继续深入探讨Excel文件的处理,例如可以写一篇关于Java POI库在Excel文件处理中的应用,相信会有更多读者受益于此。加油! 为了方便博主创作,提高生产力,CSDN上线了AI写作助手功能,就在创作编辑器右侧哦~(https://mp.csdn.net/edit?utm_source=blog_comment_recall )诚邀您来加入测评,到此(https://activity.csdn.net/creatActivity?id=10450&utm_source=blog_comment_recall)发布测评文章即可获得「话题勋章」,同时还有机会拿定制奖牌。 GitLab的Windows版基本使用 AnthonyYMH: 改下你的标题,你这个不是gitlab。。。 oracle批量修改数据库中表字段类型varchar2(Byte)->varchar(Char) 无名之辈W: 请问数据量过大的时候还能用alter吗 oracle批量修改数据库中表字段类型varchar2(Byte)->varchar(Char) 星夜鋼琴師: 可以试试生成更新语句 select t1.table_name, t1.column_name, t1.data_type, t1.char_length, 'alter table ' || t1.table_name || ' modify ("' || t1.column_name || '" VARCHAR2(' || t1.char_length || ' char));' from user_tab_columns t1 JOIN user_all_tables t2 ON t1.TABLE_NAME = t2.TABLE_NAME WHERE data_type = 'VARCHAR2' AND t1.CHAR_USED = 'B'