• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MySQL线上CPU负载过高的解决过程

MySQL FAQ 彭东稳 8年前 (2016-06-20) 22300次浏览 已收录 0个评论

接到报警通知,负载过高,达到800%,load也过高,有11了。

MySQL版本为5.6.12-log

1)top 之后,确实是mysqld进程占据了所有资源。

2)查看error日志,无任何异常。

3)show eninge innodb status\G,没有死锁信息。

4)show full processlist;

没有耗时非常大的慢sql再跑。看并发,当前的线程总数量也才30个左右。

5)查看iostat,读写正常。

到底是什么问题呢?查看slow log,发现如下SQL,频繁执行,耗时在5秒之间,explain有Using join buffer (Block Nested Loop)

看SQL是where后面的if判断引起的,拆分if之后,就正常了,SQL耗时不到0.1秒。数据库load也降下来了。

还记录以前碰到的(Block Nested Loop)的案例是join后面的on条件里面有or判断,也会引起Block Nested Loop,导致数据库负载过高。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (2)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!