如何优化MySQL服务CPU过高的问题

前言

对于JVM引起的CPU过高的问题,已经有很多解决套路了,本文再来分析一下如果是MySQL服务CPU过高应该如何排查!

定位CPU过高的原因

可以通过vmstat进行排查,关注用户空间(us)、系统空间(sy)、IO等待(wa)、软硬中断(in)、空闲(id),而系统空间(sy)、软硬中断(in)一般我们也控制不了,所以主要围绕us、wa、id来分析。

用户空间消耗

那有可能是存在大量的函数计算、排序等类似的操作

IO等待

那有可能是慢查询过多,或者并发量过高。

关于如何优化

其实对于MySQL而言,不像我们自己写的应用程序,你可能还需要排查代码bug,或者代码质量等原因,一般我们要做的就是参考一些大厂的SQL规范,再结合自己的业务特点,合理设计即可。

表设计优化

现在的微服务架构体系,不能完全按照三范式进行设计,有时候还需要一些反范式的设计,比如:如果把一个不经常发生改变的字段冗余起来,就能避免之后的RPC的调用,那还是值得的,又或者你一定听说过全局表的概念。

字段类型要合理

比如:如果tinyint够使用的就不要用int,varchar(16)够的就不要用varchar(255)(默认是255,有些人也不修改)。
更小的数据类型也就意味着占用的磁盘空间更小,内存一次缓存的数据就越多,cpu一次处理的速度就更快。

注意隐式转换问题

查询参数的类型不要和数据库字段的类型不一致,否则还需要调用函数进行一次类型转换的过程

函数的运算

可以把大量的函数运算放在应用服务端完成

索引

优化索引的选择,适当、合理的建立索引,禁止建立不必要的索引,索引过多会造成修改、插入、删除操作变慢。

总结

当然除了这些优化点之外,再往上看,单台服务总是存在瓶颈的,所以分库分表、读写分离、应用级别的缓存、减少重复的SQL请求等等都是需要考虑的问题。

猜你喜欢

转载自blog.csdn.net/CSDN_WYL2016/article/details/114318347