今日份分享:Mysql、mongodb CPU占用过多调优
缘起
去了一趟西藏,好久没碰代码了,好久没碰服务器了。
昨天有一个需求,更新一下服务器,发现master服务器上的CPU占的比较高一直持续不下。
然后我
docker stats
发现 mongodb主节点 和 mysql主节点占用的CPU比较高,一直200%,100%以上。
由此,断定这个CPU的使用率这么高是由mysql和mongodb引起的!
mysql的分析问题
mysql
mysql的分析简单
我直接登录进去,执行
show processList;
发现有一个query是dev_map_key这张表的,而且非常频繁的调用,这个频繁,也是正常的,因为设备要调用嘛。
这个表的功能:通过wifi,查询地图地址的。
怀疑跟这张表有关!
于是我
select count(*) from `dev_map_key`;
好家伙:160万条数据了!
怪不得呢!
mysql缘灭
于是,我创建了索引,速度就上去了!还不够,我还修改了代码,加了redis缓存,减少mysql的查询次数。
mongodb 问题分析
mongodb,我的想法是两种方式,一种是检查是否有慢的查询,另外一种思路和前面一样,分析数据量,直接创建索引来对比即可。
我选择了后者。
第一步,我要知道是哪个库哪个集合的问题。
我用了以下命令
mongotop -u admin -p password123 --authenticationDatabase admin
当然,上图已经解决问题了。
这里可以看出哪个集合的执行时间是多少,我发现有一个有180多毫秒的
那不用说,就是了。
Mongodb缘灭
我创建了索引
再去观察CPU的变化,完美!
看到CPU的这些图,我不禁想起小时候做android系统的功耗调优!因为那些是电池设备,所以基本上是要休眠以后电流在5毫安以下,然后某个alarm起来,心跳了,电流上去!
分析的方式差不多,或者用阿基米德排除法!