栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

数据库锁表MySQLTransactionRollbackException: Lock wait timeout exceeded; try restartin排查过程

数据库锁表MySQLTransactionRollbackException: Lock wait timeout exceeded; try restartin排查过程

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

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

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号