一次数据库锁等待超时疑似死锁排查过程

6 篇文章 0 订阅

1、起因:

测试妹纸找过来说定时任务日志里有超时日志,我看了下估摸是依赖的服务A在重启之类的原因,问题不大观望下过一分钟应该没有了

过几分钟在看日志,居然还在不停的报错,于是就去依赖的服务A看了下日志

哎呀,居然锁等待超时,莫不是死锁了?

2、排查原因:

在mysql控制端执行命令看有没有开启死锁日志开关,ON开了

show variables like 'innodb_print_all_deadlocks';

继续执行命令show engine innodb status \G;,找到LATEST DETECTED DEADLOCK对应死锁明细,看是哪些sql导致了死锁

查看后居然没有找到死锁信息,那锁等待超时原因是什么?而且再观察日志都正常了没有锁等待超时,为什么突然就好了?中途没有任何重启动作

3、猜测:

没有死锁发生但由锁等待超时,程序是没可能的,都设置了超时时间不会十几分钟不释放的。那有没可能是人为对行记录加锁了呢?试探问了下组内的同事们,还真有位同事做过表记录更新操作,且更新的记录就是发生锁等待超时的记录。

那锁等待超时问题就告一段落了。

4、后续补充

有没办法明确的定位到行加锁问题而不是考猜测论证呢?有的

# 查看当前行锁明细

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

# 根据行锁明细中的trx_mysql_thread_id查询进程明细,host为客户端ip段进口

SELECT * FROM information_schema.processlist where id=2064080

这样就知道谁(host区分人为操作、服务器)对记录加了锁辣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值