48
MySQL Tuning For CPU Bottleneck OTN China Tour 2012 @简朝阳 平安金融科技

MySQL Tuning For CPU Bottleneck

Embed Size (px)

DESCRIPTION

Slides On OTN China Tour 2012

Citation preview

Page 1: MySQL Tuning For CPU Bottleneck

MySQL Tuning For CPU Bottleneck

OTN China Tour 2012 @简朝阳

平安金融科技

Page 2: MySQL Tuning For CPU Bottleneck

主题

哪里会有性能瓶颈?

- 主机? 存储? 网络?

谁消耗了我的 CPU ?

- 谁使用? 祸首是谁?

如何减少 CPU 消耗?

- 减少等待? 减少运算?

Page 3: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

Page 4: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

存储

Page 5: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

主机

存储

Page 6: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

网络

网络

主机

存储

Page 7: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

存储

Page 8: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …

Page 9: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

主机

存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …

Page 10: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

主机

存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …

CPU

内存

Raid卡

总线

Page 11: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

网络

主机

存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …

CPU

内存

Raid卡

总线

Page 12: MySQL Tuning For CPU Bottleneck

哪里会有性能瓶颈 ?

网络

主机

存储

延时 / 吞吐量 / IOPS / …

吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …

CPU

内存

Raid卡

总线

Page 13: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ? - 谁使用?

Page 14: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu

- 谁使用?

Page 15: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu us

- 谁使用?

Page 16: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu us

用户

- 谁使用?

Page 17: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu us sy

用户

- 谁使用?

Page 18: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu us sy

用户

系统

- 谁使用?

Page 19: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户

系统

- 谁使用?

Page 20: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户

系统

IO等待

- 谁使用?

Page 21: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户

系统

IO等待

ni & si

- 谁使用?

Page 22: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户

系统

IO等待

ni & si

软硬中断

- 谁使用?

Page 23: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户

id

系统

IO等待

ni & si

软硬中断

- 谁使用?

Page 24: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户

id

系统

IO等待 空闲

ni & si

软硬中断

- 谁使用?

Page 25: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy id ni & si

- 谁使用?

较为难改变

Page 26: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy id ni & si

- 祸首是谁?

Page 27: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户空间的CPU消耗,各种逻辑运算: 函数/排序/类型转换/逻辑IO访问/…

id ni & si

- 祸首是谁?

Page 28: MySQL Tuning For CPU Bottleneck

谁消耗了我的CPU ?

cpu wa us sy

用户空间的CPU消耗,各种逻辑运算: 函数/排序/类型转换/逻辑IO访问/…

id

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

ni & si

- 祸首是谁?

Page 29: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

Page 30: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ? - 减少等待

Page 31: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id

减少IO量: SQL/Index/…

ni & si

- 减少等待

注:以往大多数关于数据库优化的资料都是解决io等待问题

Page 32: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id

减少IO量: SQL/Index/…

提升 IO 处理能力: 加Cache/加磁盘/SSD…

ni & si

- 减少等待

注:以往大多数关于数据库优化的资料都是解决io等待问题

Page 33: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ? - 减少计算

Page 34: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 降低逻辑运算量

Page 35: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 降低逻辑运算量 • 减少逻辑IO量

Page 36: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 降低逻辑运算量 • 减少逻辑IO量 • 减少Query请求量

Page 37: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中

如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数

Page 38: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中

如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数

② 减少排序:利用索引取得有序数据或避免不必要排序

如 union all代替 union,order by 索引字段等

Page 39: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中

如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数

② 减少排序:利用索引取得有序数据或避免不必要排序

如 union all代替 union,order by 索引字段等

③ 禁止类型转换:使用合适类型并保持传入参数类型与数据库字段类型绝对一致

如数字就是用tinyint/int/bigint等,必需转换的在传入数据库之前就在应用中转好

Page 40: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中

如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数

② 减少排序:利用索引取得有序数据或避免不必要排序

如 union all代替 union,order by 索引字段等

③ 禁止类型转换:使用合适类型并保持传入参数类型与数据库字段类型绝对一致

如数字就是用tinyint/int/bigint等,必需转换的在传入数据库之前就在应用中转好

④ 简单类型:尽量避免使用复杂类型,降低由于复杂类型带来的附加运算

⑤ …

Page 41: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描

如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里

Page 42: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描

如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里

② Table:合理拆分,适度冗余

如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里

Page 43: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描

如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里

② Table:合理拆分,适度冗余

如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里

③ SQL:调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他运算

如减少复杂Join,减少order by,尽量union all,避免子查询等,更多详见这里

Page 44: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描

如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里

② Table:合理拆分,适度冗余

如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里

③ SQL:调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他运算

如减少复杂Join,减少order by,尽量union all,避免子查询等,更多详见这里

④ 数据类型:够用就好,减少不必要的一味使用大字段

如 tinyint够用就别总是int,int够用也别老bigint,date够用也别总是替mestamp

⑤ …

Page 45: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 减少Query请求量(非数据库本身) ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存

如用户信息,商品信息等等

Page 46: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 减少Query请求量(非数据库本身) ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存

如用户信息,商品信息等等

② 优化实现:尽量去除不必要的重复请求

如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等

Page 47: MySQL Tuning For CPU Bottleneck

如何减少 CPU 消耗 ?

cpu wa us sy id ni & si

- 减少计算

• 减少Query请求量(非数据库本身) ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存

如用户信息,商品信息等等

② 优化实现:尽量去除不必要的重复请求

如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等

③ 合理需求:评估需求产出比,对于产出比极端低下的需求合理去除

④ …

Page 48: MySQL Tuning For CPU Bottleneck

Q & A

OTN China Tour 2012 @简朝阳

平安金融科技