接到报警通知,负载过高,达到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,导致数据库负载过高。

[MySQLCPU]线上飙升800%,load达到12的解决过程的更多相关文章

  1. 一次线上http接口调用不通相关的解决过程

    2016-05-25 08:58:34 昨天线上小白系统因为调用外部http接口,超时不释放,导致页面反应很慢,时间一长,报502错误. 上网查了下,502错误是因为服务对于客户的请求没有得到及时的反 ...

  2. [MySQL CPU]线上飙升800%,load达到12的解决过程

    接到报警通知,负载过高,达到800%,load也过高,有11了. MySQL版本号为5.6.12-log 1 top 之后,确实是mysqld进程占领了全部资源. 2 查看error日志,无不论什么异 ...

  3. 我是如何确认线上CLOSE_WAIT产生的原因及如何解决的。

    1.阐述 内部架构:Tomcat应用程序---> nginx ---> 其他Tomcat应用程序,内部Tomcat应用通过nginx调用其他应用. HTTP插件:HttpClient 4. ...

  4. 关于线上bug

    之所以想写下线上bug,因为发觉有些公司对线上bug的处理是比较严格甚至是很苛刻,涉及到的相关人可能会因此而背黑锅. 之所以会存在这样情况,因为公司各部门都有关联,特别是用户.老板的投诉,也给公司会造 ...

  5. 线上CPU飙升100%问题排查,一篇足矣

    一.引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高. 二.问题复现 线上系统突然 ...

  6. 对cpu与load的理解及线上问题处理思路解读

    前言 2019双11还有不到2个月就要到来了,大家也都知道服务器在大促期间由于流量的增加势必导致机器的cpu与load变高.因此趁着这个时机正好再好好学习.巩固一下cpu和load的概念,为双11做准 ...

  7. 线上CPU飙升100%问题排查

    本文转载自线上CPU飙升100%问题排查 引子 对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考 ...

  8. 案例分享 | dubbo 2.7.12 bug导致线上故障

    本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star.搜索关注微信公众号"捉虫大师",后端技术分享,架构设计.性能优化.源码阅读. ...

  9. 对cpu与load的理解及线上问题处理思路

    cpu如何计算 当我们执行top命令的时候,看到里面的值(主要是cpu和load)值是一直在变的,因此有必要简单了解一下Linux系统中cpu的计算方式. cpu分为系统cpu和进程.线程cpu,系统 ...

随机推荐

  1. Codeforces--596A--Wilbur and Swimming Pool(数学)

     A - Wilbur and Swimming Pool Crawling in process... Crawling failed Time Limit:1000MS     Memory ...

  2. 套接字(socket)与socket 编程

    字节序: 主机字节序(host byte order):不同的主机有不同的字节序,x86:小端: 网络字节序(network byte order):大端字节序: 0. 什么是套接字 套接字是网络进程 ...

  3. operator[] 重载

    #include <iostream>#include <vector>#include <string> class Assoc {    struct Pair ...

  4. 分享的js代码,从w3c上拓下来的

    <!DOCTYPE html><html><head> <title></title> <script>window._bd_s ...

  5. 【BZOJ3456】城市规划

    题目 转送门 思路&算法 我们设点数为\(n\)的简单图的数量为\(f_n\), 点数为\(n\)的简单连通图有\(g_i\)个 于是我们知道,从\(n\)个点中选\(2\)个点有\(n \c ...

  6. Python 28 选课系统的讲解

    1.首先我们要对每一个新的项目有一个明确的思路,脑子是好东西,但是好记性不如烂笔头,所以,要把能想到的都写下来 2.然后就是创建项目的整体结构框架,比如说:conf ( 配置文件 ) .core (  ...

  7. Python可迭代序列排序总结

    列表排序 示例:lst = [12, 6, 1, 3, 10] 方法一:使用sort def list_sort(lst): lst.sort() # 就地排序,没有返回值 return lst 补充 ...

  8. shiro英语

    Security Manager安全管理人员 Tutorial 辅导的 transient 短暂的 Cipher 密码 Memory 记忆 Access 访问Handy Hint 方便提示separa ...

  9. reduce多种方法计算数组中某个值的出现次数

    先来了解下reduce用法 arr.reduce(callback[, initialValue]) callback执行数组中每个值的函数,包含四个参数: accumulator 累计器累计回调的返 ...

  10. GO 协程 通道实例以及验证SnowFlake算法

    最近项目中使用了SnowFlake算法产生ID,并在实际运行环境下会产生重复ID,所以写了一个Go的程序进行验证,顺便也练习一下Go的协程与通道. 至于GO的协程和通道的基础知识请自行百度. 代码如下 ...