排查数据库死锁问题

一、常见报错:
 
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,看结果是否为空

posted @ 2022-01-05 15:13  美女爱找茬  阅读(1582)  评论(0编辑  收藏  举报