React 前端导航

mysql添加索引后导致cpu飙升问题记录

mysql添加索引后导致cpu飙升问题记录

背景

新加的功能某个数据接口查询慢,经排查是查询一个第三方绑定数据表慢,所以向数据库添加索引以提高查询速度,但是在添加后服务器CPU直接从20+%直接飙升至95+%,数据库连接数也飞涨,结果当然就不用说了,直接导致日志入库失败,数据查询超时,影响现有业务。

问题排查

首先考虑做了什么操作导致的问题,因为问题出现是在添加索引后出现的,所以首先考虑的是添加的索引有问题,由于同时添加了几个索引,不知道是哪个出了问题。

我们尝试删除所有新加的索引,但是服务器CPU拉满了,任何操作都做不了,这就很蛋疼。

我们的数据库使用的是AWS的RDS,它提供了performace insight的功能,可以查看Top 10耗时的操作,我们看到新添加索引的表查询非常慢,大量sql语句等待执行。

现在想让mysql能够执行我们的删除索引的命令,所以我们尝试临时升级mysql的配置,但是没有什么用,升级后CPU也是直接95+%,还是无法执行删除索引操作。

最后无奈,只能将慢查询所在的业务接口暂时停掉(注:我们这里的服务器主要是日志记录,所以综合考量暂时停一下影响不大), 等CPU降下来后,执行索引删除操作,恢复出问题之前的状态。

索引的问题

回过头来再看索引的问题,添加的几个索引中,有一个索引其实是有问题的,问题索引的数据值分布很少,这样的索引过滤行很差,这样的索引就很容易引起CPU飙升。

具体的分析可参考:http://mysql.taobao.org/monthly/2015/10/03 ,这里不做详细阐述。

总结

1.合理的使用索引

2.对生产环境的操作一定要经过压测,这里我们就只是在测试环境添加后没有出现问题就直接上生产环境,这个流程就出现了问题。

声明:本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。邮箱:farmerlzj@163.com。 本站原创内容未经允许不得转载,或转载时需注明出处: 内容转载自: React前端网:https://qianduan.shop/blogs/detail/18
想做或者在做副业的朋友欢迎加微信交流:farmerlzj,公众号:生财空间站。

#mysql#索引

相关推荐

node + mysql保存Emoji失败乱码问题

mysql保存Emoji表情,字符串直接存进去会变编码问题

egg mysql 查询 Date 类型数据时区不对,时间减了 8 个小时

日志表里存储了写入时间,时间存的是 Date 类型的数据,直接 select 出来的数据比存储的实际数据要少 8 个小时,数据库格式:2018-03-12 14:46:31, 通过egg-mysql查询出来的格式:2018-03-12T06:46:31.000Z, 自动加上了时区而且还是错误的时区。