狠狠撸

狠狠撸Share a Scribd company logo
MySQL Tuning For CPU Bottleneck


      OTN China Tour 2012
            @简朝阳
           平安金融科技
主题


? 哪里会有性能瓶颈?
  - 主机? 存储? 网络?

? 谁消耗了我的 CPU ?
  - 谁使用? 祸首是谁?

? 如何减少 CPU 消耗?
  - 减少等待? 减少运算?
?
哪里会有性能瓶颈
?
     哪里会有性能瓶颈




存储
?
     哪里会有性能瓶颈




主机




存储
?
     哪里会有性能瓶颈


网络




主机




网络



存储
?
     哪里会有性能瓶颈




存储
哪里会有性能瓶颈        ?




存储      吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
哪里会有性能瓶颈        ?

主机




存储      吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
哪里会有性能瓶颈        ?

        CPU
主机
        内存
        Raid卡
        总线
        …




存储      吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
哪里会有性能瓶颈        ?
网络



        CPU
主机
        内存
        Raid卡
        总线
        …




存储      吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
哪里会有性能瓶颈        ?
网络      延时 / 吞吐量 / IOPS / …




        CPU
主机
        内存
        Raid卡
        总线
        …




存储      吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
?
谁消耗了我的颁笔鲍
            - 谁使用?
?
谁消耗了我的颁笔鲍
            - 谁使用?




                     cpu
?
     谁消耗了我的颁笔鲍
                 - 谁使用?




us                        cpu
?
          谁消耗了我的颁笔鲍
                      - 谁使用?


     用户




us                             cpu
?
          谁消耗了我的颁笔鲍
                      - 谁使用?


     用户




us   sy                        cpu
?
               谁消耗了我的颁笔鲍
                           - 谁使用?


          用户




us        sy                        cpu


     系统
?
               谁消耗了我的颁笔鲍
                           - 谁使用?


          用户




us        sy     wa                 cpu


     系统
谁消耗了我的颁笔鲍  ?   - 谁使用?


          用户




us        sy          wa                cpu


     系统

               IO等待
谁消耗了我的颁笔鲍            ?   - 谁使用?


          用户




us        sy          wa   ni & si                cpu


     系统

               IO等待
谁消耗了我的颁笔鲍            ?   - 谁使用?


          用户

                           软硬中断




us        sy          wa   ni & si                cpu


     系统

               IO等待
谁消耗了我的颁笔鲍            ?   - 谁使用?


          用户

                           软硬中断




us        sy          wa   ni & si   id           cpu


     系统

               IO等待
谁消耗了我的颁笔鲍            ?   - 谁使用?


          用户

                           软硬中断




us        sy          wa   ni & si   id           cpu


     系统

               IO等待                         空闲
谁消耗了我的颁笔鲍         ?   - 谁使用?




us   sy     wa    ni & si   id           cpu




          较为难改变
谁消耗了我的颁笔鲍        ?   - 祸首是谁?




us   sy     wa   ni & si   id        cpu
谁消耗了我的颁笔鲍                  ?   - 祸首是谁?

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




us     sy         wa         ni & si   id        cpu
谁消耗了我的颁笔鲍                  ?   - 祸首是谁?

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




us     sy         wa         ni & si   id        cpu



         等待IO请求的完成,
         此时CPU实际上空闲
?
如何减少 CPU 消耗
?
如何减少 CPU 消耗
              - 减少等待
如何减少 CPU 消耗             ?- 减少等待



us   sy           wa    ni & si    id       cpu



      减少IO量:
          SQL/Index/…




     注:以往大多数对于数据库优化的资料都是解决io等待问题
如何减少 CPU 消耗                 ?
                                      - 减少等待



us   sy           wa        ni & si   id       cpu



      减少IO量:
          SQL/Index/…
      提升 IO 处理能力:
          加Cache/加磁盘/SSD…



     注:以往大多数对于数据库优化的资料都是解决io等待问题
?
如何减少 CPU 消耗
              - 减少计算
如何减少 CPU 消耗      ?
                             - 减少计算



us     sy     wa   ni & si   id       cpu




     ? 降低逻辑运算量
如何减少 CPU 消耗      ?
                             - 减少计算



us     sy     wa   ni & si   id       cpu




     ? 降低逻辑运算量
     ? 减少逻辑IO量
如何减少 CPU 消耗      ?
                              - 减少计算



us      sy     wa   ni & si   id       cpu




     ? 降低逻辑运算量
     ? 减少逻辑IO量
     ? 减少Query请求量
如何减少 CPU 消耗                 ?   - 减少计算



us         sy         wa          ni & si       id       cpu




? 降低逻辑运算量
     ① 避免使用函数:将运算转移至易于扩展的应用服务器中
       如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数
如何减少 CPU 消耗                    ?- 减少计算



us         sy           wa           ni & si    id       cpu




? 降低逻辑运算量
     ① 避免使用函数:将运算转移至易于扩展的应用服务器中
       如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数
     ② 减少排序:利用索引取得有序数据或避免不必要排序
       如 union all代替 union,order by 索引字段等
如何减少 CPU 消耗                    ?- 减少计算



us         sy           wa           ni & si    id       cpu




? 降低逻辑运算量
     ① 避免使用函数:将运算转移至易于扩展的应用服务器中
       如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数
     ② 减少排序:利用索引取得有序数据或避免不必要排序
       如 union all代替 union,order by 索引字段等
     ③ 禁止类型转换:使用合适类型并保持传入参数类型与数据库字段类型绝对一致
       如数字就是用tinyint/int/bigint等,必需转换的在传入数据库之前就在应用中转好
如何减少 CPU 消耗                    ?- 减少计算



us         sy           wa           ni & si    id       cpu




? 降低逻辑运算量
     ① 避免使用函数:将运算转移至易于扩展的应用服务器中
       如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数
     ② 减少排序:利用索引取得有序数据或避免不必要排序
       如 union all代替 union,order by 索引字段等
     ③ 禁止类型转换:使用合适类型并保持传入参数类型与数据库字段类型绝对一致
       如数字就是用tinyint/int/bigint等,必需转换的在传入数据库之前就在应用中转好
     ④ 简单类型:尽量避免使用复杂类型,降低由于复杂类型带来的附加运算
     ⑤ …
如何减少 CPU 消耗          ?
                                    - 减少计算



us        sy      wa      ni & si   id       cpu




? 减少逻辑IO量
     ① Index:优化索引,减少不必要的表扫描
       如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里
如何减少 CPU 消耗           ?
                                     - 减少计算



us        sy       wa      ni & si   id       cpu




? 减少逻辑IO量
     ① Index:优化索引,减少不必要的表扫描
        如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里
     ② Table:合理拆分,适度冗余
        如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里
如何减少 CPU 消耗               ?   - 减少计算



us         sy         wa        ni & si      id          cpu




? 减少逻辑IO量
     ① Index:优化索引,减少不必要的表扫描
        如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里
     ② Table:合理拆分,适度冗余
        如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里
     ③ SQL:调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他运算
        如减少复杂Join,减少order by,尽量union all,避免子查询等,更多详见这里
如何减少 CPU 消耗                 ?     - 减少计算



us          sy          wa         ni & si        id           cpu




? 减少逻辑IO量
     ① Index:优化索引,减少不必要的表扫描
        如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里
     ② Table:合理拆分,适度冗余
        如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里
     ③ SQL:调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他运算
        如减少复杂Join,减少order by,尽量union all,避免子查询等,更多详见这里
     ④ 数据类型:够用就好,减少不必要的一味使用大字段
        如 tinyint够用就别总是int,int够用也别老bigint,date够用也别总是替mestamp
     ⑤ …
如何减少 CPU 消耗       ?
                                 - 减少计算



us        sy      wa   ni & si   id       cpu




? 减少Query请求量(非数据库本身)
     ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存
       如用户信息,商品信息等等
如何减少 CPU 消耗          ?
                                    - 减少计算



us        sy      wa      ni & si   id       cpu




? 减少Query请求量(非数据库本身)
     ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存
       如用户信息,商品信息等等
     ② 优化实现:尽量去除不必要的重复请求
       如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等
如何减少 CPU 消耗         ?
                                    - 减少计算



us         sy     wa      ni & si   id       cpu




? 减少Query请求量(非数据库本身)
     ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存
       如用户信息,商品信息等等
     ② 优化实现:尽量去除不必要的重复请求
       如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等
     ③ 合理需求:评估需求产出比,对于产出比极端低下的需求合理去除
     ④ …
Q&A


OTN China Tour 2012
      @简朝阳
     平安金融科技

More Related Content

MySQL Tuning For CPU Bottleneck

  • 1. MySQL Tuning For CPU Bottleneck OTN China Tour 2012 @简朝阳 平安金融科技
  • 2. 主题 ? 哪里会有性能瓶颈? - 主机? 存储? 网络? ? 谁消耗了我的 CPU ? - 谁使用? 祸首是谁? ? 如何减少 CPU 消耗? - 减少等待? 减少运算?
  • 4. 哪里会有性能瓶颈 存储
  • 5. 哪里会有性能瓶颈 主机 存储
  • 6. 哪里会有性能瓶颈 网络 主机 网络 存储
  • 7. 哪里会有性能瓶颈 存储
  • 8. 哪里会有性能瓶颈 ? 存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
  • 9. 哪里会有性能瓶颈 ? 主机 存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
  • 10. 哪里会有性能瓶颈 ? CPU 主机 内存 Raid卡 总线 … 存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
  • 11. 哪里会有性能瓶颈 ? 网络 CPU 主机 内存 Raid卡 总线 … 存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
  • 12. 哪里会有性能瓶颈 ? 网络 延时 / 吞吐量 / IOPS / … CPU 主机 内存 Raid卡 总线 … 存储 吞吐量 / IOPS / 容量 / 延时 / 内部带宽 / …
  • 14. ? 谁消耗了我的颁笔鲍 - 谁使用? cpu
  • 15. 谁消耗了我的颁笔鲍 - 谁使用? us cpu
  • 16. 谁消耗了我的颁笔鲍 - 谁使用? 用户 us cpu
  • 17. 谁消耗了我的颁笔鲍 - 谁使用? 用户 us sy cpu
  • 18. 谁消耗了我的颁笔鲍 - 谁使用? 用户 us sy cpu 系统
  • 19. 谁消耗了我的颁笔鲍 - 谁使用? 用户 us sy wa cpu 系统
  • 20. 谁消耗了我的颁笔鲍 ? - 谁使用? 用户 us sy wa cpu 系统 IO等待
  • 21. 谁消耗了我的颁笔鲍 ? - 谁使用? 用户 us sy wa ni & si cpu 系统 IO等待
  • 22. 谁消耗了我的颁笔鲍 ? - 谁使用? 用户 软硬中断 us sy wa ni & si cpu 系统 IO等待
  • 23. 谁消耗了我的颁笔鲍 ? - 谁使用? 用户 软硬中断 us sy wa ni & si id cpu 系统 IO等待
  • 24. 谁消耗了我的颁笔鲍 ? - 谁使用? 用户 软硬中断 us sy wa ni & si id cpu 系统 IO等待 空闲
  • 25. 谁消耗了我的颁笔鲍 ? - 谁使用? us sy wa ni & si id cpu 较为难改变
  • 26. 谁消耗了我的颁笔鲍 ? - 祸首是谁? us sy wa ni & si id cpu
  • 27. 谁消耗了我的颁笔鲍 ? - 祸首是谁? 用户空间的CPU消耗,各种逻辑运算: 函数/排序/类型转换/逻辑IO访问/… us sy wa ni & si id cpu
  • 28. 谁消耗了我的颁笔鲍 ? - 祸首是谁? 用户空间的CPU消耗,各种逻辑运算: 函数/排序/类型转换/逻辑IO访问/… us sy wa ni & si id cpu 等待IO请求的完成, 此时CPU实际上空闲
  • 30. ? 如何减少 CPU 消耗 - 减少等待
  • 31. 如何减少 CPU 消耗 ?- 减少等待 us sy wa ni & si id cpu 减少IO量: SQL/Index/… 注:以往大多数对于数据库优化的资料都是解决io等待问题
  • 32. 如何减少 CPU 消耗 ? - 减少等待 us sy wa ni & si id cpu 减少IO量: SQL/Index/… 提升 IO 处理能力: 加Cache/加磁盘/SSD… 注:以往大多数对于数据库优化的资料都是解决io等待问题
  • 33. ? 如何减少 CPU 消耗 - 减少计算
  • 34. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 降低逻辑运算量
  • 35. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 降低逻辑运算量 ? 减少逻辑IO量
  • 36. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 降低逻辑运算量 ? 减少逻辑IO量 ? 减少Query请求量
  • 37. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中 如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数
  • 38. 如何减少 CPU 消耗 ?- 减少计算 us sy wa ni & si id cpu ? 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中 如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数 ② 减少排序:利用索引取得有序数据或避免不必要排序 如 union all代替 union,order by 索引字段等
  • 39. 如何减少 CPU 消耗 ?- 减少计算 us sy wa ni & si id cpu ? 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中 如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数 ② 减少排序:利用索引取得有序数据或避免不必要排序 如 union all代替 union,order by 索引字段等 ③ 禁止类型转换:使用合适类型并保持传入参数类型与数据库字段类型绝对一致 如数字就是用tinyint/int/bigint等,必需转换的在传入数据库之前就在应用中转好
  • 40. 如何减少 CPU 消耗 ?- 减少计算 us sy wa ni & si id cpu ? 降低逻辑运算量 ① 避免使用函数:将运算转移至易于扩展的应用服务器中 如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数 ② 减少排序:利用索引取得有序数据或避免不必要排序 如 union all代替 union,order by 索引字段等 ③ 禁止类型转换:使用合适类型并保持传入参数类型与数据库字段类型绝对一致 如数字就是用tinyint/int/bigint等,必需转换的在传入数据库之前就在应用中转好 ④ 简单类型:尽量避免使用复杂类型,降低由于复杂类型带来的附加运算 ⑤ …
  • 41. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描 如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里
  • 42. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描 如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里 ② Table:合理拆分,适度冗余 如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里
  • 43. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描 如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里 ② Table:合理拆分,适度冗余 如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里 ③ SQL:调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他运算 如减少复杂Join,减少order by,尽量union all,避免子查询等,更多详见这里
  • 44. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 减少逻辑IO量 ① Index:优化索引,减少不必要的表扫描 如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等,更多详见这里 ② Table:合理拆分,适度冗余 如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”,更多详见这里 ③ SQL:调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他运算 如减少复杂Join,减少order by,尽量union all,避免子查询等,更多详见这里 ④ 数据类型:够用就好,减少不必要的一味使用大字段 如 tinyint够用就别总是int,int够用也别老bigint,date够用也别总是替mestamp ⑤ …
  • 45. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 减少Query请求量(非数据库本身) ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存 如用户信息,商品信息等等
  • 46. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 减少Query请求量(非数据库本身) ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存 如用户信息,商品信息等等 ② 优化实现:尽量去除不必要的重复请求 如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等
  • 47. 如何减少 CPU 消耗 ? - 减少计算 us sy wa ni & si id cpu ? 减少Query请求量(非数据库本身) ① 适当缓存:降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存 如用户信息,商品信息等等 ② 优化实现:尽量去除不必要的重复请求 如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等 ③ 合理需求:评估需求产出比,对于产出比极端低下的需求合理去除 ④ …
  • 48. Q&A OTN China Tour 2012 @简朝阳 平安金融科技