zoukankan      html  css  js  c++  java
  • 数据库死锁和慢日志问题导致服务不可用的排查过程

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

    首先是根据报的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异常开始的。

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

  • 相关阅读:
    2014.12.31今年最后的一天
    leetcode11 盛最多水的容器(Medium)
    leetcode23 合并k个排序链表(Hard)
    leetcode148 排序链表(Medium)
    leetcode48 旋转图像(Medium)
    leetcode227基本计算器II (Medium)
    leetcode338 比特位计数(Medium)
    leetcode32 最长有效括号(Hard)
    leetcode面试题10.01 合并排序的数组(Easy)
    leetcode55 跳跃游戏(Medium)
  • 原文地址:https://www.cnblogs.com/zjfjava/p/10951665.html
Copyright © 2011-2022 走看看