数据库死锁和慢日志问题导致服务不可用的排查过程

 数据库执行更新失败,查看日志

首先是根据报的Exception进行排查:

org.hibernate.exception.LockAcquisitionException: could not execute statement

很明显,是数据库死锁,导致不能执行我的更新sql。

思路一:查找并杀死死锁的进程

查看进程

-- 查询是否锁表
show OPEN TABLES where In_use > 0;
-- 查询当前用户进程
SHOW PROCESSLIST;
-- 查询当前的事务 
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
-- 查看当前锁定的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 
-- 查看当前等锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

查找出占用当前锁的进程id,kill掉即可。

kill 1234;

通过上面方式未查询到死锁的进程,为排除其他进程影响,我将连接该数据库的进程都kill掉,之后重启服务进行重新连接,问题依然存在。

思路二:断开的管道

数据库死锁产生的原因有:

  • 系统资源不足
  • 进程运行推进的顺序不合适
  • 资源分配不当等

通过上面排查基本排除掉是业务代码产生死锁,接下来排查系统资源,通过排查,发现果然是系统资源的原因导致。慢日志占用空间过大,导致数据库所在服务器不能再进行写入,所以报IOException。排查问题时也应该先从IO异常开始的。

接下来就是分析慢日志,确定是业务代码原因还是慢日志配置的原因(执行时间设定等),分析完之后删掉腾出空间。

 

转载于:https://www.cnblogs.com/zjfjava/p/10951665.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值