收到一个mysql服务器负载告警,上去一看,load average都飙到280多了,用top一看,CPU跑到了336%,不过IO和内存的负载并不高,根据经验,应该又是一起索引引起的惨案了。

看下processlist以及slow query情况,发现有一个SQL经常出现,执行计划中的扫描记录数看着还可以,单次执行耗时为0.07s,还不算太大。乍一看,可能不是它引发的,但出现频率实在太高,而且执行计划看起来也不够完美:

?1mysql> explainSELECT count(1)FROM a , bWHERE a.id = b.video_idand b.state = 1AND b.column_id ='81'\G

?12345678910111213141516171819202122*************************** 1. row ***************************id: 1select_type: SIMPLEtable: btype: index_mergepossible_keys: columnid_videoid,column_id,state,video_time_stamp,idx_videoidkey: column_id,statekey_len: 4,4ref:NULLrows: 100Extra: Usingintersect(column_id,state); Usingwhere*************************** 2. row ***************************id: 1select_type: SIMPLEtable: atype: eq_refpossible_keys:PRIMARYkey:PRIMARYkey_len: 4ref: b.video_idrows: 1Extra: Usingwhere; Usingindex

再看下该表的索引情况:

?1mysql> showindex from b\G

?123456789101112131415161718192021222324252627282930313233343536373839404142*************************** 1. row ***************************Table: bNon_unique: 0Key_name:PRIMARYSeq_in_index: 1Column_name: idCollation: ACardinality: 167483Sub_part:NULLPacked:NULLNull:Index_type: BTREEComment:Index_comment:*************************** 2. row ***************************Table: bNon_unique: 1Key_name: column_idSeq_in_index: 1Column_name: column_idCollation: ACardinality: 8374Sub_part:NULLPacked:NULLNull:Index_type: BTREEComment:Index_comment:*************************** 3. row ***************************Table: bNon_unique: 1Key_name: stateSeq_in_index: 2Column_name: stateCollation: ACardinality: 5Sub_part:NULLPacked:NULLNull:Index_type: BTREEComment:Index_comment:

可以看到执行计划中,使用的是index merge,效率自然没有用联合索引(也有的叫做覆盖索引)来的好了,而且 state 字段的基数(唯一性)太差,索引效果很差。删掉两个独立索引,修改成联合看看效果如何:

?1mysql> showindex from b;

?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667*************************** 1. row ***************************Table: bNon_unique: 0Key_name:PRIMARYSeq_in_index: 1Column_name: idCollation: ACardinality: 128151Sub_part:NULLPacked:NULLNull:Index_type: BTREEComment:Index_comment:*************************** 2. row ***************************Table: bNon_unique: 1Key_name: idx_columnid_stateSeq_in_index: 1Column_name: column_idCollation: ACardinality: 3203Sub_part:NULLPacked:NULLNull:Index_type: BTREEComment:Index_comment:*************************** 3. row ***************************Table: bNon_unique: 1Key_name: idx_columnid_stateSeq_in_index: 2Column_name: stateCollation: ACardinality: 3463Sub_part:NULLPacked:NULLNull:Index_type: BTREEComment:Index_comment: mysql> explainSELECT count(1)FROM a , bWHERE a.id = b.video_idand b.state = 1AND b.column_id ='81' \G *************************** 1. row ***************************id: 1select_type: SIMPLEtable: btype: refpossible_keys: columnid_videoid,idx_videoid,idx_columnid_statekey: columnid_videoidkey_len: 4ref: constrows: 199Extra: Usingwhere*************************** 2. row ***************************id: 1select_type: SIMPLEtable: atype: eq_refpossible_keys:PRIMARYkey:PRIMARYkey_len: 4ref: b.video_idrows: 1Extra: Usingwhere; Usingindex

可以看到执行计划变成了只用到了 idx_columnid_state 索引,而且 ref 类型也变成了 const,SQL执行耗时也从0.07s变成了0.00s,相应的CPU负载也从336%突降到了12%不到。

总结下,从多次历史经验来看,如果CPU负载持续很高,但内存和IO都还好的话,这种情况下,首先想到的一定是索引问题,十有八九错不了。

mysql写入 cpu飙升_分析MySQL中索引引引发的CPU负载飙升的问题相关推荐

  1. mysql not exists无效_分析MySQL中哪些情况下数据库索引会失效

    要想分析MySQL查询语句中的相关信息,如是全表查询还是部分查询,就要用到explain. 一.explain 用法:explain +查询语句. id:查询语句的序列号,上面图片中只有一个selec ...

  2. mysql float字节长度_分析MySQL数据类型的长度

    分析MySQL数据类型的长度 MySQL有几种数据类型可以限制类型的"长度",有CHAR(Length).VARCHAR(Length).TINYINT(Length). SMAL ...

  3. mysql distinct 慢_分析MySQL中优化distinct的技巧

    有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user ...

  4. mysql distinct 优化_Mysql应用分析MySQL中优化distinct的技巧

    <MysqL应用分析MysqL中优化distinct的技巧>要点: 本文介绍了MysqL应用分析MysqL中优化distinct的技巧,希望对您有用.如果有疑问,可以联系我们. sql用于 ...

  5. docker中mysql数据定时备份_[Docker]MySql 定时备份

    前言 今天调整了机器的参数,要做一个备份,想到还没有做自动备份,要是数据丢了,就啥都没了.所以研究了下,使用mysqldump来定时备份mysql的数据. 分析 我这块数据库是在容器中运行的,在宿主机 ...

  6. mysql 添加int列_在MySQL中现有的int列的值中添加字符?

    要将字符添加到现有的int列值中,请使用MySQL CONCAT().让我们首先创建一个表-mysql> create table DemoTable ( Amount int ); 使用插入命 ...

  7. mysql shell 所有表_删除mysql数据库中所有表的shell脚本

    分享一个可以删除mysql中所有表的shell脚本,代码如下: 复制代码 代码示例: #!/bin/bash # 删除mysql中所有表 # 示例: # Usage: ./script user pa ...

  8. mysql zerofill设置方法_在MySQL中使用ZEROFILL设置自定义自动增量

    让我们首先创建一个表.这里.我们使用ZEROFILL和AUTO_INCREMENT设置了UserId列mysql> create table DemoTable1831 ( UserId int ...

  9. mysql 如何对表排序_学习MySQL:对表中的数据进行排序和过滤

    mysql 如何对表排序 In this article, we will learn how we can sort and filter data using the WHERE clause a ...

最新文章

  1. Android Training - 使用IntentService运行任务(Lesson 2 - 发送任务给IntentService)
  2. python是一门什么课程-从无到有用Python创造一门属于自己的编程语言1
  3. C/C++获取系统当前时间
  4. HDU 3788 ZOJ问题
  5. Cambridge hpc
  6. PHP中abstract 和 interface的区别
  7. [CF]Codeforces Round #529 (Div. 3)
  8. hadoop Connection refused: no further information原因排查(Centos7)
  9. 【Dart学习】-- Dart之泛型
  10. PHP商城源码|好看的团购拼购商城源码
  11. @Html.ActionLink方法
  12. mustache.js html模板,js模板引擎Mustache将h5模板页面转化为小程序页面
  13. python3 float最大值_Python3(3) Python 函数
  14. 45. Element isDefaultNamespace() 方法
  15. python - list 列表推导式
  16. URL编码的原因及场景
  17. 为什么手机网速太慢_为什么苹果手机的网速变慢了_苹果手机上网速度慢的解决方法-系统城...
  18. php中怎么添加css样式_html怎么添加css样式?
  19. matlab 直方图均衡化、规定化 ,线性灰度级变换实现图像增强
  20. matlab 获取文件毫秒时间,在Matlab中经过的时间,以毫秒为单位,具有不同的日期...

热门文章

  1. 弹簧触摸开关原理图_两种触摸开关电路
  2. php 邮箱重置密码错误,discuz邮箱重置密码参数失败的解决方法
  3. 《大数据》第1期“专题”——大数据与高性能计算
  4. JAVA——附加作业2——情人节送花
  5. 洛谷 P5713、P5719、P5730、P5737题 题解(Java语言描述)
  6. 【Java】撩开Java线程的“神秘面纱”
  7. 【Java】欧拉回路的判定
  8. SCOI2019凉凉记
  9. 洛谷P4831 Scarlet loves WenHuaKe
  10. AIX系统下RAC故障之-VIPCA 错误