谁消耗CPU

用户、系统、IO等待、软硬中断、空闲。
其中系统和软硬中断是比较难改变的,另外用户和IO等待消耗了大部分CPU

用户消耗和IO等待

用户空间CPU消耗,各种逻辑运算:

  • 函数
  • 排序
  • 类型转换
  • 逻辑IO访问
  • 以及等待IO请求完成

  • IO等待其实是等待IO请求的完成,这个时候CPU是空闲的

影响

  • 吞吐量下降
  • 查询响应时间增加
  • 慢查询数增加
    对MySQL的并发增加,也会产生这些影响

吞吐量

QPS:Queries Per Second的缩写,意思是每秒查询率。一台服务器每秒相应的查询次数。

TPS:Transactions Per Second的缩写,意思为事务数/秒。一个事务指客户机向服务器发送请求,服务器处理,服务器返回结果的过程。在发送请求时计时,收到响应后结束计时,这样子来计算tps。

并发数:系统同时处理的事务数

系统吞吐量三个重要参数:QPS(TPS),并发数,平均相应时间
QPS(TPS)=并发数/平均响应时间

减少IO等待的消耗

减少IO量:

  • 使用合适的索引减少扫描的行数,空间换时间

提升IO处理能力:

  • 加cache,加磁盘

减少用户消耗

减少逻辑运算量:

  • 避免使用函数,将运算转移至应用服务器
  • 减少排序,利用索引取得有序数据
  • 减少类型转换
  • 尽量使用简单类型,更小的数据类型占用更少的磁盘、内存、CPU缓存、CPU周期

减少逻辑IO量:

  • index,优化索引,减少不必要的表扫描
  • table,合理拆分,适度冗余
    很少使用的大字段拆分到独立表,频繁使用的小字段冗余到引用表
  • SQL,调整SQL写法,利用现有索引,避免扫描和排序
  • 数据类型,够用就行,不必要用大字段
    tinyint够用不用int,int够用不用bigint

减少Query请求量

  • 适当缓存,对多次请求的数据缓存
  • 优化实现,去除不必要的重复请求,禁止重复请求相同数据,通过参数传递减少访问
  • 合理需求