转载自  面试官问:如果MySQL引起CPU消耗过大,你会怎么优化

谁在消耗cpu?

用户+系统+IO等待+软硬中断+空闲

祸首是谁?

用户

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

正在进行大量tps

函数/排序/类型转化/逻辑IO访问…

用户空间消耗大量cpu,产生的系统调用是什么?那些函数使用了cpu周期?

IO等待

等待IO请求的完成

此时CPU实际上空闲

如vmstat中的wa 很高。但IO等待增加,wa也不一定会上升(请求I/O后等待响应,但进程从核上移开了)

产生影响

用户和IO等待消耗了大部分cpu

  • 吞吐量下降(tps)

  • 查询响应时间增加

  • 慢查询数增加

  • 对mysql的并发陡增,也会产生上诉影响

如何减少CPU消耗?

减少等待

减少IO量

SQL/index,使用合适的索引减少扫描的行数(需平衡索引的正收益和维护开销,空间换时间)

提升IO处理能力

加cache/加磁盘/SSD

减少计算

减少逻辑运算量

  • 避免使用函数,将运算转移至易扩展的应用服务器中 如substr等字符运算,dateadd/datesub等日期运算,abs等数学函数

  • 减少排序,利用索引取得有序数据或避免不必要排序 如union all代替 union,order by 索引字段等

  • 禁止类型转换,使用合适类型并保证传入参数类型与数据库字段类型绝对一致 如数字用tiny/int/bigint等,必需转换的在传入数据库之前在应用中转好

  • 简单类型,尽量避免复杂类型,降低由于复杂类型带来的附加运算。更小的数据类型占用更少的磁盘、内存、cpu缓存和cpu周期

  • ….

减少逻辑IO量

  • index,优化索引,减少不必要的表扫描 如增加索引,调整组合索引字段顺序,去除选择性很差的索引字段等等

  • table,合理拆分,适度冗余 如将很少使用的大字段拆分到独立表,非常频繁的小字段冗余到“引用表”

  • SQL,调整SQL写法,充分利用现有索引,避免不必要的扫描,排序及其他操作 如减少复杂join,减少order by,尽量union all,避免子查询等

  • 数据类型,够用就好,减少不必要使用大字段 如tinyint够用就别总是int,int够用也别老bigint,date够用也别总是timestamp

  • ….

减少query请求量(非数据库本身

  • 适当缓存,降低缓存数据粒度,对静态并被频繁请求的数据进行适当的缓存 如用户信息,商品信息等

  • 优化实现,尽量去除不必要的重复请求 如禁止同一页面多次重复请求相同数据的问题,通过跨页面参数传递减少访问等

  • 合理需求,评估需求产出比,对产出比极端底下的需求合理去除

  • ….

升级cpu若经过减少计算和减少等待后还不能满足需求,cpu利用率还高T_T 是时候拿出最后的杀手锏了,升级cpu,是选择更快的cpu还是更多的cpu了?

  • 低延迟(快速响应),需要更快的cpu(每个查询只能使用一个cpu)

  • 高吞吐,同时运行很多查询语句,能从多个cpu处理查询中收益

参考

  • 《高性能MySQL》

  • 《图解性能优化》

  • 大部分整理自《MySQL Tuning For CPU Bottleneck》

面试官问:如果MySQL引起CPU消耗过大,你会怎么优化相关推荐

  1. 从面试官问“为什么选择mysql数据库”说开去

    前几天面试,面试官问我:"为什么选择mysql数据库".现在想想,有如下的问题需要解决 关系型数据库有什么特点及举例 非关系型数据库有什么特点及举例 关系型数据库与非关系型数据库有 ...

  2. 面试官问我MySQL事务的底层原理?幸亏我总结了全套八股文

    迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"我爱加班". 面试开始,直 ...

  3. 5月面试美团面试官问到MySQL时我竟无言以对,闭关42天,再战美团

    MySQL 作为主流的数据库,在业务开发中有着举足轻重的地位.绝大部分一线企业,尤其是电商大厂,在线交易业务这块,如订单.支付系统,都离不开 MySQL 这种金融级的关系型数据库.因此在选用人才时,大 ...

  4. 面试官问:MySQL 的自增 ID 用完了,怎么办?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:程序猿面试指南 既然这块知识点不清楚,那回头就自己动手实践下 ...

  5. 如果MySQL引起CPU消耗过大,你会怎么优化?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.cnblogs.com ...

  6. MySQL 导致 CPU 消耗过大,如何优化

    作者:jiaxin http://www.cnblogs.com/YangJiaXin/ 谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正 ...

  7. mysql 分段执行_面试官问你MySQL的优化,看这篇文章就够了

    作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...

  8. 面试官问你MySQL的优化,看这篇文章就够了

    作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...

  9. 事物的级别_面试官问:MySQL锁与事物隔离级别你知道吗?

    本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收 ...

最新文章

  1. C++实现字符串和整数之间的相互转换
  2. 5 多数据save_《Netlogo多主体建模入门》笔记 7
  3. 郑州军办计算机学校,郑州市国防科技学校2019级新生开启军训模式
  4. 菲波拉契数列(传统兔子问题)
  5. java 反射 int_Java 反射由浅入深 | 进阶必备
  6. vue2.0 如何自定义组件(vue组件的封装)
  7. [gstreamer][001] Seek issues and so on
  8. CCF NOI1008 水仙花数
  9. springboot 打印日志
  10. 计算机无法安装VC2015,win7系统vc++2015一个或多个问题导致了安装失败的处理步骤...
  11. 计算机操作系统-第一章复习题
  12. 网页连接服务器数据库,网站程序中常见的数据库连接方法
  13. 苹果app退款_??充值消费退款
  14. 关于杨创YC2440uboot移植
  15. 阿里巴巴内测全网社交产品来往
  16. BaiduFaceApi.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
  17. 网络故障排查常见方法
  18. 那堪春景媚,送君千万里
  19. 魔兽世界8.0哪个服务器稳定,魔兽世界8.0怀旧服是哪个版本 8.0怀旧服详细介绍...
  20. RSD 教程 —— §2.5  重置与卸载RSD

热门文章

  1. java实用教程——组件及事件处理——ActionEvent事件
  2. Excel学习使用教程
  3. C++ 学习之旅(6)——循环loop
  4. 洛谷T172098 子串-substr
  5. [蓝桥杯2016初赛]交换瓶子
  6. 工业互联网白皮书_发布|《工业互联网平台安全白皮书(2020)》发布
  7. GG and MM(every sg 游戏)
  8. F. Cowmpany Cowmpensation(树形dp + 拉格朗日插值)
  9. P1537 弹珠 背包可行性dp
  10. 【牛客NOIP模拟】 牛牛的RPG游戏【二维偏序】【任意坐标斜率优化】【CDQ 分治】【李超线段树】