去大厂面试被问:如果是MySQL引起的CPU消耗过大,你会如何优化
云栖号:https://yqh.aliyun.com
第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策!
目录
谁在消耗cpu?
祸首是谁?
- 用户
- IO等待
- 产生影响
如何减少CPU消耗?
- 减少等待
- 减少计算
- 升级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处理查询中收益
云栖号在线课堂,每天都有产品技术专家分享
立即加入圈子:https://c.tb.cn/F3.Z8gvnK
与专家面对面,及时了解课程最新动态!
原文发布时间:2020-03-12
本文作者:jiaxin_12
本文来自:“互联网架构师公众号”,了解相关信息可以关注“互联网架构师”

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
基于阿里云搭建自己的的Hexo博客
1. 博客的架构 先搞明白Hexo博客从搭建到自动发布的架构,才能更好的理解我们每一步进行的操作。不然只跟着步骤过了一遍,却不知道为什么这么做。 首先看这张架构图: 整个流程就是本地将 *.md 渲染成静态文件,然后Git推送到服务器的repository,服务器再通过 git-hooks 同步网站根目录。 2. 整个搭建流程 前提条件:阿里云服务器 第一部分: 服务器环境搭建,包括安装 Git 、Nginx配置 、创建 git 用户 。 第二部分: 本地Hexo初始化, 包括安装 NodeJS 、hexo-cli, 生成本地静态网站 第三部分: 使用Git自动化部署发布博客 3. 服务器环境搭建 3-1.安装Git和NodeJS (CentOS 环境) yum install git #安装NodeJS curl --silent --location https://rpm.nodesource.com/setup_5.x | bash - NodeJS 安装可以参考: Linux安装NodeJS 3-2. 创建git用户 adduser git chmod 740 /et...
- 下一篇
云计算快速落地,云安全发展可期
云栖号:https://yqh.aliyun.com第一手的上云资讯,不同行业精选的上云企业案例库,基于众多成功案例萃取而成的最佳实践,助力您上云决策! 中国企业上云步骤加快,但与发达国家差距明显。随着科技的发展和信息技术的不断普及,经济数字化的浪潮愈演愈烈,人们在生产生活中要面对和处理的数据规模与数据种类越来越庞大,对于运算效率和资源环境的需求也越来越高,传统的硬件计算机和服务器模式已经难以满足人们的需求,越来越多的企业选择将各种信息、业务上云,企业的应用和管理也逐渐云端化。 根据《中国云计算产业发展白皮书》,2016年,欧洲国家的上云率已经超过60%,美国企业上云率更是高达80%,但我国企业的上云率才不到40%,这意味着云计算产业在我国至少还有3-5的成长期。 与全球相比,中国的云计算市场成长空间大。从全球视野来看,我国的云计算技术的发展和应用目前仍处于起步阶段。根据艾媒咨询的研究,尽管云计算已经发展10年,但中国云计算市场整体规模较小,落后全球云计算市场3至5年。在全球云计算市场趋于稳定增长的背景下,中国云计算市场正处于高速增长阶段。 国内政策利好推动企业上云,云计算市场未来可期...
相关文章
文章评论
共有0条评论来说两句吧...