谁在消耗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处理查询中收益

转载:https://mp.weixin.qq.com/s/5dsMwgrGraX7D_gQHO0P1g

阿里云面试官:如果是MySQL引起的CPU消耗过大,你会如何优化?相关推荐

  1. 我以为我对Mysql索引很了解,直到我遇到了阿里的面试官

    GitHub 4.8k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 4.8k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 4.8k Star 的 ...

  2. 原创|我以为我对Mysql索引很了解,直到我遇到了阿里的面试官

    本文来自一位不愿意透露姓名的粉丝投稿,由Hollis整理并"还原"了面试现场. 相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构. ...

  3. 你以为你懂MySQL索引?阿里的面试官:你还太嫩!

    相信很多人对于MySQL的索引都不陌生,索引(Index)是帮助MySQL高效获取数据的数据结构. 因为索引是MySQL中比较重点的知识,相信很多人都有一定的了解,尤其是在面试中出现的频率特别高.楼主 ...

  4. [CentOS Python系列] 四.阿里云服务器CentOS连接远程MySQL数据库及pymsql

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  5. 物联网平台搭建的全过程介绍(十)阿里云服务器ESC上安装MySQL数据库

    目录 一.MySQL数据库简介 二.MySQL数据库安装 步骤1.运行以下命令更新YUM源 步骤2.运行以下命令安装MySQL 步骤3.运行以下命令查看MySQL版本号 三.MySQL数据库配置 步骤 ...

  6. 面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://dwz.cn/exC8JdQS InnoDB的一棵B+树可以存放多少行数 ...

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

    转载自  面试官问:如果MySQL引起CPU消耗过大,你会怎么优化 谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正在进行大量tps 函数 ...

  8. 阿里云ECS官网域名映射及Tomcat配置调整,最终使用HTTPS和域名直接访问

    在另一篇文章中,已经讲述了怎么在ECS(Ubantu版)上安装docker和Tomcat,并顺利启动和访问,该篇文章重点说明如何调整Tomcat配置,与域名映射一致,并采用HTTPS访问 一.进行EC ...

  9. 阿里云apache配置php mysql_阿里云CentOS7搭建Apache+PHP+MySQL环境

    最近要搭建一个阿里云的LMAP环境,选了CentOS7来做搭建. 1.Apache Centos7默认已经安装httpd服务,只是没有启动. 如果你需要全新安装,可以yum install -y ht ...

最新文章

  1. 测量左右磁极的原片磁铁
  2. OkHttp3 websocket
  3. (5)段描述符S位,TYPE域
  4. Mysql select into outfile NULL值导出的处理方法
  5. loadView 和 viewDidLoad、viewDidunload 的区别
  6. WinForm XML
  7. mysql维护计划_MySQL服务维护笔记
  8. [渝粤教育] 西南科技大学 经济法学 在线考试复习资料(1)
  9. 京东笔试题:如何实现 MySQL 删除重复记录并且只保留一条?
  10. 求助!妹子一个rm -rf把公司服务器数据删没了,我该怎么办
  11. python 日志框架_按日期打印Python的Tornado框架中的日志的方法
  12. iccid的PHP规则,中国联通(U)SIM卡ICCID命名规则
  13. 移动硬盘读不出来,无法识别的6种修复方法
  14. golang 解析UTF8编码形式的字符串
  15. 极客日报第 53 期:抖音将代替拼多多成为春晚独家红包合作伙伴;高通正研发 8cx 升级版处理器,对标苹果 M1;DuckDuckGo 日查询量首次突破 1 亿
  16. 最牛逼的大数据视频讲解
  17. u盘中毒自动生成exe的 处理办法
  18. 【无标题】DH460钢板交货状态,DH460钢板供应
  19. chacha20算法,适用于单片机
  20. 数字人事系统 java_我省税务系统全面推行数字人事管理

热门文章

  1. 信息系统项目管理师-知识管理知识点
  2. 大话设计模式(一 面试受挫——代码无错就是好?)
  3. CentOS安装Java JDK
  4. Apache httpd Server 配置正向代理
  5. 是什么优化让 .NET Core 性能飙升?
  6. linux根-文件系统-目录管理-文件管理-用户及权限详解-用户组-用户管理-权限管理...
  7. Make Games with Python Pygame (2)
  8. 【转载】dirs、pushd、popd指令
  9. 【自然框架】分享 n级联动下拉列表框
  10. Javascript在页面加载时的执行顺序