面试官问:如果MySQL引起CPU消耗过大,你会怎么优化
转载自 面试官问:如果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消耗过大,你会怎么优化相关推荐
- 从面试官问“为什么选择mysql数据库”说开去
前几天面试,面试官问我:"为什么选择mysql数据库".现在想想,有如下的问题需要解决 关系型数据库有什么特点及举例 非关系型数据库有什么特点及举例 关系型数据库与非关系型数据库有 ...
- 面试官问我MySQL事务的底层原理?幸亏我总结了全套八股文
迎面走来了你的面试官,身穿格子衫,挺着啤酒肚,发际线严重后移的中年男子. 手拿泡着枸杞的保温杯,胳膊夹着MacBook,MacBook上还贴着公司标语:"我爱加班". 面试开始,直 ...
- 5月面试美团面试官问到MySQL时我竟无言以对,闭关42天,再战美团
MySQL 作为主流的数据库,在业务开发中有着举足轻重的地位.绝大部分一线企业,尤其是电商大厂,在线交易业务这块,如订单.支付系统,都离不开 MySQL 这种金融级的关系型数据库.因此在选用人才时,大 ...
- 面试官问:MySQL 的自增 ID 用完了,怎么办?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:程序猿面试指南 既然这块知识点不清楚,那回头就自己动手实践下 ...
- 如果MySQL引起CPU消耗过大,你会怎么优化?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://www.cnblogs.com ...
- MySQL 导致 CPU 消耗过大,如何优化
作者:jiaxin http://www.cnblogs.com/YangJiaXin/ 谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正 ...
- mysql 分段执行_面试官问你MySQL的优化,看这篇文章就够了
作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...
- 面试官问你MySQL的优化,看这篇文章就够了
作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...
- 事物的级别_面试官问:MySQL锁与事物隔离级别你知道吗?
本文作者:何建辉(公众号:org_yijiaoqian) 点赞再看,养成习惯,微信搜一搜[一角钱小助手]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收 ...
最新文章
- C++实现字符串和整数之间的相互转换
- 5 多数据save_《Netlogo多主体建模入门》笔记 7
- 郑州军办计算机学校,郑州市国防科技学校2019级新生开启军训模式
- 菲波拉契数列(传统兔子问题)
- java 反射 int_Java 反射由浅入深 | 进阶必备
- vue2.0 如何自定义组件(vue组件的封装)
- [gstreamer][001] Seek issues and so on
- CCF NOI1008 水仙花数
- springboot 打印日志
- 计算机无法安装VC2015,win7系统vc++2015一个或多个问题导致了安装失败的处理步骤...
- 计算机操作系统-第一章复习题
- 网页连接服务器数据库,网站程序中常见的数据库连接方法
- 苹果app退款_??充值消费退款
- 关于杨创YC2440uboot移植
- 阿里巴巴内测全网社交产品来往
- BaiduFaceApi.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
- 网络故障排查常见方法
- 那堪春景媚,送君千万里
- 魔兽世界8.0哪个服务器稳定,魔兽世界8.0怀旧服是哪个版本 8.0怀旧服详细介绍...
- RSD 教程 —— §2.5 重置与卸载RSD
热门文章
- java实用教程——组件及事件处理——ActionEvent事件
- Excel学习使用教程
- C++ 学习之旅(6)——循环loop
- 洛谷T172098 子串-substr
- [蓝桥杯2016初赛]交换瓶子
- 工业互联网白皮书_发布|《工业互联网平台安全白皮书(2020)》发布
- GG and MM(every sg 游戏)
- F. Cowmpany Cowmpensation(树形dp + 拉格朗日插值)
- P1537 弹珠 背包可行性dp
- 【牛客NOIP模拟】 牛牛的RPG游戏【二维偏序】【任意坐标斜率优化】【CDQ 分治】【李超线段树】