排查数据库死锁问题


一、常见报错:
 
org.springframework.dao.CannotAcquireLockException异常,但是在打印出日志的时候,显示的是 com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded; try restarting transaction。提示的是Lock wait timeout exceeded(锁等待超时);try restarting transaction (尝试开启新事务);
 
二、排查
 
  1. 排查数据库是否发生表锁,整张表被锁定,也就无法往里插入数据;
show open table where in_use > 0; //查询是否表锁
 
    2. 排查数据库中该表是否有事务抢占了该锁,导致该请求无法获取锁,然后一直等待,等待时间超过数据库设置的默认时间就会失败。
select * from imformation_schema.innodb_trx; //查询运行的事务,是否被锁住
 
 
三、问题解决
 
  1. 只需要把之前的事务杀死就可以了
kill id; //id为线程id,使用该命令就可以杀死某条线程
 
     2. 再次检查select * from imformation_schema.innodb_trx,看结果是否为空


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM