故障案例---innodb表出现大量的Waiting for table level lock

本文介绍了在MySQL中遇到的一个故障,即InnoDB表出现大量Waiting for table level lock的情况。通过分析,发现故障源于一个MyISAM表上的触发器,该触发器在每次更新时都会更新时间戳,导致锁等待。模拟故障过程验证了这一结论。总结建议包括避免使用MyISAM引擎,优化业务逻辑减少行锁竞争,以及关注触发器引发的性能问题。
摘要由CSDN通过智能技术生成

故障现象

show  full processlist发现大量的innodb表出现Waiting for table level lock,业务将近不可用

原因分析

1 一开始当然是认为这是myisam引擎导致的,扫了一圈发现该db下确实有一个myisam表;

2 不过故障时无论是show  processlist还是innodb_trx等结果看,都没有发现这个myisam表的记录;

3 排查了一圈又没有其他发现,于是又将怀疑的对象转到这个唯一存在的myisam表

4 鬼使神差地查了下information_schema.triggers表,发现了大量的触发器,触发器的意思大概是:无论什么表做什么更新,都将最后的时间戳写入到这个myisam表

5  基本断定原因就是它了,触发器更新myisam表,导致show  processlist显示innodb处于Waiting for table level lock


故障模拟

1 sysbench准备一个表的数据,数据量很少即可,一个表即可

sysbench --report-interval=1 --num-threads=50  --max-time=2000 --test=sysbench/tests/db/oltp.lua --mysql-user='root' --mysql-password='mysql19-=' --oltp-table-size=50000 --mysql-host=10.9.158.2 --mysql-port=3306 --mysql-db=xx  --max-requests=500000 --oltp-tables-count=1 prepare

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值