mysql双主同步占用cpu高_一次mysql占用cpu高的处理过程

今天早上在正式服部署了新代码,过了一段时间,服务器的负载告警,cpu使用率告警,登录服务器查询,发现是mysql导致cpu的使用率过高,于是show processlist查询了一下,看到有很多线程处于sending data和lock的状态中,都是select某个数据库的某张表的操作。

于是将sending data的那些sql语句复制执行了一遍,发现执行它们的时间太长,然后又explain分析了一下。

有条select的条件中没有主键和索引,由于查询条件中那个字段具有唯一性,所以和开发商量将这个字段加入索引,果然根据这个字段select的sql都不会处于sending data的状态了;

有条select的条件中是有根据主键查询的,但是也是处于sending data状态,不过这张表用的是复合主键,但是复合主键中有索引的只是第一个字段,第二个字段是无索引的,所以查询速度慢了很多。

根据主键第一字段和第二字段测试查询的结果如下:

7263d8c0849d437ab8cbec586ad5429f.png

f38115bd747bde710149c3b8e8ef764c.png

所以需要另外为第二字段增加一个索引。

关于复合主键的索引问题可以参考下面这篇文章

增加索引后,cpu的使用率下降了许多,但是还是存在问题的。所以我们先回退了版本,在测试服再做下并发测试,将问题完全解决再部署到正式服。在测试服开启慢查询日志,将所有执行效率低的sql优化下。

慢查询日志开启的文章

mysql5.1以上版本才支持方法2,动态开启或关闭日志功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值