谁消耗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请求量
- 适当缓存,对多次请求的数据缓存
- 优化实现,去除不必要的重复请求,禁止重复请求相同数据,通过参数传递减少访问
- 合理需求