[MySQL CPU]线上飙升800%,load达到12的解决过程
来源:互联网 发布:mac制作铃声 编辑:程序博客网 时间:2024/05/19 11:50
接到报警通知,负载过高,达到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)
mysql> explain select web_page_object.web_page_object_id, -> web_page_object.object_id, -> web_div_name,web_page_object.position_sort,web_page_object.end_time,om1.label,om1.file,jump_url,om2.label as label1,om2.file as file1 -> from web_page_div,web_page_object,object_media as om1,object_media as om2 -> where web_page_div.id=web_page_object.web_page_div_id -> and web_page_object.object_media_id=om1.object_media_id -> and web_page_div.web_page_id=1200 -> and if(web_page_object.object_media_id1=0, -> web_page_object.object_media_id=om2.object_media_id, -> web_page_object.object_media_id1=om2.object_media_id) -> -> and '2014-05-01 15:09:49'>=start_time -> and '2014-05-01 15:09:49'<= end_time -> -> and object_status=0 -> order by web_page_div.id,web_page_object.position_sort;+----+-------------+-----------------+--------+-----------------------+---------+---------+-------------------------------------------+-------+----------------------------------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-----------------+--------+-----------------------+---------+---------+-------------------------------------------+-------+----------------------------------------------------+| 1 | SIMPLE | web_page_object | ALL | object_media_id_index | NULL | NULL | NULL | 51165 | Using where; Using temporary; Using filesort || 1 | SIMPLE | web_page_div | eq_ref | PRIMARY,idx | PRIMARY | 4 | db_jiapin.web_page_object.web_page_div_id | 1 | Using where || 1 | SIMPLE | om1 | eq_ref | PRIMARY | PRIMARY | 4 | db_jiapin.web_page_object.object_media_id | 1 | Using where || 1 | SIMPLE | om2 | ALL | NULL | NULL | NULL | NULL | 74759 | Using where; Using join buffer (Block Nested Loop) |+----+-------------+-----------------+--------+-----------------------+---------+---------+-------------------------------------------+-------+----------------------------------------------------+Using join buffer (Block Nested Loop)
看SQL是where后面的if判断引起的,拆分if之后,就正常了,SQL耗时不到0.1秒。数据库load也降下来了。
还记录以前碰到的
(Block Nested Loop)的案例是 join后面的on条件里面有or判断。
也会引起Block Nested Loop,导致数据库负载过高。
6 0
- [MySQL CPU]线上飙升800%,load达到12的解决过程
- [MySQL CPU]线上飙升800%,load达到12的解决过程
- 线上飙升800%,load达到12的解决过程
- 记一次mongodb CPU飙升100%的解决
- 线上故障之load Average和cpu使用率的分析
- mysql CPU占用解决过程
- 1.1.MySQL数据库CPU飙升解决及烂sql记录工具
- MYSQL优化——CPU 占用 100% 的解决过程
- MySQL cpu 达到100% 的问题分析与解决办法
- Mysql数据库CPU占用达到80%的简单排查解决办法
- php的file_get_contents导致cpu飙升
- 查看导致CPU飙升的线程
- 如何找到CPU飙升的原因
- 发布过程5分钟内load飙升问题排查
- mysql占用CPU超过100%解决过程
- mysql数据库cpu飙升到500%的话他怎么处理?
- MySQL线上 MM结构架构一次手动failover的过程
- 一则线上MySql连接异常的排查过程
- jQuery实战小知识
- ACM-威佐夫博弈之取石子游戏——hdu1527
- 浏览器的分类
- 位运算简介及实用技巧(三):进阶篇(2)
- 信息提示控件ToolTip
- [MySQL CPU]线上飙升800%,load达到12的解决过程
- solr的基本使用
- 《Java程序员的推荐阅读书籍》
- TCP/IP栈结构
- 如何让访问win8电脑的共享盘 不用总提示输入网络凭证
- 内网端口映射工具之80端口映射和全端口映射及辅助发布网站应用
- 图像处理基本概念——卷积,滤波,平滑
- Java接口与类集
- javaSE编程基础(函数)