如何优化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请求等等都是需要考虑的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码拉松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值