一般是谁在消耗CPU?
用户+系统+IO等待+软硬中断+空闲
其中系统和软硬中断这两部分是比较难被改变的

  • 用户

用户空间CPU消耗,各种逻辑运算
(正在进行大量tps,函数/排序/类型转换/逻辑IO访问…)

  • IO等待

    等待IO请求的完成
    (此时CPU实际上很空闲)

如果是Mysql引起的CPU消耗过大,如何优化?

如果是Mysql引起的CPU消耗过大,如何优化?

  • 用户和IO等待消耗了大部分cpu
  1. 吞吐量下降
  2. 查询响应时间增加
  3. 慢查询数增加
  4. 对mysql的并发陡增,也会产生上诉影响

如何减少CPU消耗?

减少等待

  • 减少IO量:

    SQL/index,使用合适的索引减少扫描的行数(空间换时间)

  • 提升IO处理能力:

    加cache/加磁盘

减少计算

  • 减少逻辑运算量
    避免使用函数
    减少排序:利用索引取得有序数据或避免不必要的排序,如union all代替union,order by索引字段等
    禁止类型转换:使用合适类型并保证传入参数类型与数据库字段类型绝对一致
    简单类型:尽量避免复杂类型,降低由于复杂类型带来的附加运算。更小的数据类型占用更少的磁盘、内存、cpu缓存和cpu周期

  • 减小逻辑IO量
    index:优化索引,减小不必要的表扫描,调整组合索引字段顺序,去除选择性很差的索引字段等
    table:合理拆分,适度冗余,如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到引用表
    SQL:调整SQL语法,充分利用现有索引,避免不必要的扫描,排序及其他操作。如减少复杂join,减少order by,尽量union all,避免子查询
    数据类型:够用就好

  • 减小query请求量
    适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存,如用户信息,商品信息等
    优化实现:尽量去除不必要的重复请求 如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等
    合理需求:评估需求产出比,对产出比极端低下的需求合理去除

相关文章:

  • 2021-12-05
  • 2022-01-10
  • 2021-11-19
  • 2021-11-24
猜你喜欢
  • 2021-05-10
  • 2021-09-16
  • 2021-09-21
  • 2021-11-05
相关资源
相似解决方案