排查数据库死锁问题
一、常见报错:
org.springframework.dao.CannotAcquireLockException异常,但是在打印出日志的时候,显示的是com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction。提示的是Lock wait timeout exceeded(锁等待超时);try restarting transaction (尝试开启新事务);
二、排查
- 排查数据库是否发生表锁,整张表被锁定,也就无法往里插入数据;
show open table where in_use > 0; //查询是否表锁
2. 排查数据库中该表是否有事务抢占了该锁,导致该请求无法获取锁,然后一直等待,等待时间超过数据库设置的默认时间就会失败。
select * from imformation_schema.innodb_trx; //查询运行的事务,是否被锁住
三、问题解决
- 只需要把之前的事务杀死就可以了
kill id; //id为线程id,使用该命令就可以杀死某条线程
2. 再次检查select * from imformation_schema.innodb_trx,看结果是否为空
三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)