mysql死锁问题定位和解决

1、背景

  • 不知道怎么回事我重复操作一张表,感觉像死锁,但是查询死锁表却没有数据,在这张表执行任何SQL语句都没有用。

2、分析

  • 可能是死锁
  1. 怎么查询是否死锁

    • SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
      
  2. 怎么查询是否等待

    • SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
      
  3. 怎么查询当前是否执行中的事务

    • SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
      
  4. 怎么查询当前数据库处理线程列表

    • show full  PROCESSLIST;
      
  5. 怎么删除或杀掉卡住事务

    • kill 线程id/pid
      

2.1、处理经过

  • 首先执行 1,2 sql发现并没有死锁或等待,但是这张表却执行SQL还是很慢,几分没有执行结果

  • 然后我执行4,仔细查看state 和info字段 是否有waiting关键字,还是你的表(由于涉及隐私,不截取具体数据)

    • 然后我发现确实有waiting关键字,怎么删除这一条数据呢?
    • 执行 5命令, 也就 kill id (这个表主键)
    • image-20210527174913716
  • 删除 processList 有涉及对应表waiting的数据,准备执行这个表SQL还是卡住了。

  • 执行 3、 查询所有正在运行事务,发现还有7条正在运行,具体不清除为什么一直在运行,没有结果,此时删除这个事务的数据

    • kill trx_mysql_thread_id字段(线程id)

2.3、总结

  • 这些表是有关联的
  • image-20210527190319980

3、参考

  1. MySQL 死锁检查处理
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值