zoukankan      html  css  js  c++  java
  • 数据库锁表排查

    问题
    客户反馈后台系统信息添加很卡,然后添加失败,无法添加
    查看服务日志,发现mysql报错锁表
    程序和数据库近期没有改动,所以首先锁定日志排查,确认锁的表和具体原因
    解决
    根据tomcat输出的日志,确认为mysql报错抛出的问题
    根据打印的堆栈,找到对应代码,发现报错处是一个删除方法
    查询锁表的SQL线程,是删除语句,删除时耗时较长卡主了
    # 查询现有事务,看哪些进程在等待
    select * from information_schema.innodb_trx;
    # 紧急处理,可以先删除现有事务进程
    SELECT CONCAT('kill ',trx_mysql_thread_id,';') FROM INFORMATION_SCHEMA.INNODB_TRX;
    1
    2
    3
    4


    查看业务后,发现是信息更新时需要删除一些关联表信息,主表200万左右数据,关联表是主表的3倍左右,700多万,没有加索引,查询删除时较慢
    由于一直有客户操作,无法添加索引,只能把tomcat服务停掉
    tomcat服务停掉后,对关联表的删除查询所需字段public_content_id加了索引,恢复正常
    后续
    后面又遇到一次,信息删除时报错,查看了下,发现数据量不是特别大,其他业务数据库查询也很正常
    追踪了错误日志,也是Lock wait timeout,但是把sql单独执行,发现很快
    判断应该是其他业务请求返回很慢,一直挂起等待返回,导致同一个线程的删除服务的SQL执行超时,回滚
    查看了具体的业务,删除mysql信息时,需要同步删除elasticsearch的索引信息。删除索引出错,设置的超时时间又很长,比mysql执行超时时间还长,进而一直未报elasticsearch的超时错误而报了mysql的超时错误
    对elasticsearch删除问题进行了处理,并将索引操作另起线程,放入线程池执行,问题解决

    ————————————————
    版权声明:本文为CSDN博主「坚持是一种态度」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010882234/article/details/116564545

  • 相关阅读:
    eyoucms遍历子栏目,有二级栏目的点击展开或者收缩
    eyoucms 遍历栏目下的子栏目
    帝国cms 内容页根据关键词来调用相关内容
    帝国cms 上传的图片前台不显示
    帝国cms 通过字段内容来获取数据
    eyoucms 去掉 index.php后缀
    通过jquery插件复制文字
    帝国cms 表单弹窗提交,判断后才能提交到后台
    动态库和静态库
    J-520-2018年第二届河北省大学生程序设计竞赛(快速幂取模)
  • 原文地址:https://www.cnblogs.com/chenqingbin/p/15380656.html
Copyright © 2011-2022 走看看