接到报警通知,负载过高,达到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,导致数据库负载过高。
分享到:
相关推荐
解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记
Java基于ssm+mysql的线上会议管理系统的实现.zipJava基于ssm+mysql的线上会议管理系统的实现.zipJava基于ssm+mysql的线上会议管理系统的实现.zipJava基于ssm+mysql的线上会议管理系统的实现.zipJava基于ssm+mysql的...
MySQL占用CPU近100%
解决 MySQL 服务器进程 CPU 占用 100%的技术笔记
完美Mysql 线上部署初始化
基于ssm+mysql线上会议管理系统设计与实现.docx基于ssm+mysql线上会议管理系统设计与实现.docx基于ssm+mysql线上会议管理系统设计与实现.docx基于ssm+mysql线上会议管理系统设计与实现.docx基于ssm+mysql线上会议...
朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 ... MYSQL CPU 占用 100% 的解决过程 今天早上仔细检查了一下。目前此网站的七日平均日 IP 为2000,PageView 为 3万左右。网站A 用的 database 目前有39个表,记录数
对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高。 二、问题复现 线上系统突然运行缓慢,CPU...
MySQL线上常见故障剖析.pdf
Jsp课程设计基于javaweb+MySQL的线上图书购物系统源码+sql数据库+演示视频.zipJsp课程设计基于javaweb+MySQL的线上图书购物系统源码+sql数据库+演示视频.zipJsp课程设计基于javaweb+MySQL的线上图书购物系统源码+sql...
介绍:http://blog.csdn.net/xin1384233/article/details/21156309
MySQL线上SQL捕获及分析
基于ssm+mysql快餐店线上点餐系统设计与实现.docx基于ssm+mysql快餐店线上点餐系统设计与实现.docx基于ssm+mysql快餐店线上点餐系统设计与实现.docx基于ssm+mysql快餐店线上点餐系统设计与实现.docx基于ssm+mysql...
mysql cpu占用率 100%的解决方法,其实mysql cpu占用高了,一般都是一些语句比较占资源。
MySQL DBA线上疑难杂症化解全揭秘,都是血泪总结的,必看的
基于SSM框架+Mysql开发的线上商城项目(带管理平台) 基于SSM框架+Mysql开发的线上商城项目(带管理平台) 基于SSM框架+Mysql开发的线上商城项目(带管理平台) 基于SSM框架+Mysql开发的线上商城项目(带管理平台) 基于SSM...
MySQL导致的CPU高负载问题 今天下午发现了一个MySQL导致的向上服务器...top - 17:12:44 up 104 days, 20 min, 2 users, load average: 1.06, 1.02, 1.00 Tasks: 218 total, 1 running, 217 sleeping, 0 stopped, 0 zo
基于ssm_mysql_线上会议管理系统_源码.zip
资源名字:基于Springboot+mysql的线上买菜系统设计与实现(源码+部署说明+视频演示).zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百成功运行。 基于Spring Boot和MySQL的...