在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。

  • 优美的音乐节奏带你浏览这个效果的编码过程
  • 坚持每一天,是每个有理想青年的追求
  • 追寻年轻人的脚步,也许你的答案就在这里
  • 如果你迷茫 不妨来瞅瞅这里

在活动时间开始的时候, MySQL 服务就挂了,登上服务器一看,CPU 消耗接近 100%, 但整个数据库每秒就执行不到 100 个事务,这是什么原因呢?


MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。

  • 全局锁主要用在逻辑备份过程中
  • 表锁一般是在数据库引擎不支持行锁的时候才会被用到的
  • 行锁在引擎层由各个引擎自己实现

行锁就是针对数据表中行记录的锁,如事务 A 更新了一行,而这时候事务 B 也要更新同一行,则必须等事务 A 的操作完成后才能进行更新。


1 MySql 两阶段锁协议

在 InnoDB 引擎事务中,行锁是在需要的时候才加上,然后等到事务结束时才释放,这个标准被称为 两阶段锁协议。

两阶段锁协议中,整个事务分为两个阶段,前一个阶段为加锁,后一个阶段为解锁

顾客 A 要在商家 B 购买一支笔,这个业务需要涉及到以下操作:

  1. 从顾客 A 账户余额中扣除一支笔的费用;(update操作)
  2. 给商家 B 的账户余额增加支笔的费用; (update操作)
  3. 记录一条交易日志。(insert操作)

要完成这个交易,需要 update 两条记录(如 1、2的操作),并 insert 一条记录(如3的操作),为 了保证交易的原子性,需要把这三个操作放在一个事务中。

假设正在此时,顾客C也在商家B这购买了这样的一支笔,那这个过程中出现事务冲突的就是第二步 商家 B 的账户增加笔的费用,因为需要修改同一行数据。

根据两阶段锁协议,所有的操作需要的行锁都是在事务提交的时候才释放的,也就是说只有在顾客A交易完成后,顾客C才能交易完成。

一个操作细节就是:把语句 2 安排在最后,比如按照 3、1、2 这样的顺序,那么商家 B账户余额这一行的锁时间就最少,这就最大程度地减少了事务之间的锁等待,提升了并发度。

2 死锁问题

当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。

MySql 参数 innodb_deadlock_detect 设置为 on(默认也为开启),表示开启这个逻辑,死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他 事务得以继续执行。

死锁检测要耗费大量的 CPU 资源,这就是CPU 消耗接近 100%的原因。

一种解决方案就是控制并发度,比如同一行同时最多只有 10 个线程在更新,那么死锁检测的成本很低,就不会出现这个问题,

一般这个并发控制要做在数据库服务端,如果有中间件,可以考虑在中间件实现,当然也可以做在 MySQL 里面。

【后续章节会更新Java中的并发编程】


完毕

不局限于思维,不局限语言限制,才是编程的最高境界。

以小编的性格,肯定是要录制一套视频的,随后会上传

有兴趣 你可以关注一下 西瓜视频 — 早起的年轻人

MySQL 服务挂了 CPU 消耗接近 100% 你知道怎么回事吗???相关推荐

  1. 扩大mysql的cpu_MySQL CPU占用超过100%

    mysql实例cpu超过100%分析当我们mysql数据库实例超过100%时,这种情况都是因sql性能问题导致,实例出现卡主现象:1.原理,cpu消耗过大有慢sql造成,慢sql包括全表扫描,扫描数据 ...

  2. MySQL 如何优化 CPU 消耗?

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

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

    谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正在进行大量tps函数/排序/类型转化/逻辑IO访问- 用户空间消耗大量cpu,产生的系统调 ...

  4. 织梦mysql占用资源_解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记

    早上帮朋友一台服务器解决了Mysql cpu 占用 100%的问题.稍整理了一下: 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysq ...

  5. svchost.exe占系统cpu资源的100%解决办法

    症状现象描述: 机器启动运行几分钟后 svchost.exe就会占系统cpu资源的100% 拔掉网线就好了,重连上网后一会儿:svchost.exe又占cpu资源的99%: 解决方法: 假设你已经使用 ...

  6. MySQL服务读取参数文件my.cnf的规律研究探索

    在MySQL中,它是按什么顺序或规律去读取my.cnf配置文件的呢?其实只要你花一点功夫,实验测试一下就能弄清楚,下面的实验环境为5.7.21 MySQL Community Server.其它版本如 ...

  7. 阿里如何面试MySQL优化CPU消耗

    点击▲关注 "中生代技术"   给公众号标星置顶 更多精彩技术内容 第一时间直达 来源 | https://www.cnblogs.com/YangJiaXin/p/1093345 ...

  8. MySQL数据库CPU飙升到100%解决方案

    1.定位cpu问题所在 当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理. 2.查看慢查询日志 进入mysql命令行 m ...

  9. 手动提高CPU利用率到接近100%

    对于如下有4颗核的CPU ~ # cat /proc/cpuinfo | grep processor processor : 0 processor : 1 processor : 2 proces ...

最新文章

  1. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器启用https服务申请免费证书...
  2. 限定概率抽奖_守护星已点亮,内测皮肤得到没?从天美抽奖概率分析:地址什么梗...
  3. Mysql5.1.36 autoinstall.sh
  4. 开始 Scrum 3: Values of Scrum
  5. Yii框架官方教程增补篇3——开始:创建第一个Yii应用
  6. vbreport8.wpf.viewer 个别电脑不显示_【电脑手机小技巧】新买的电脑,第一次开机最好要这样设置...
  7. mysql dbutil_DBUtil
  8. Proteus 数字示波器
  9. RouterOS 端口映射
  10. 一键智能抠图-原理实现
  11. 把自己的电脑作为网络代理服务器
  12. 10个BS后台UI框架
  13. 变量巫师_如何在《巫师III:狂猎》中扮演格温特
  14. 【Python 23】52周存钱挑战3.0(循环计数for与range)
  15. 计算机word文例试题及答案,大学计算机考试word试题及答案
  16. 高博14讲--第七讲 视觉里程计-7.3 2D-2D:对极几何
  17. 语言模型 Probability Based: Language Model
  18. 晁盖与吴用 3gp转换软件
  19. matlab 大数,在Matlab中考虑大数,然后得到结果中的数字
  20. 迈普路由器访问控制列表配置命令_cisco访问控制列表acl所有配置命令详解

热门文章

  1. 如何找出光纤微米级别的脏污?女朋友的一个举动给了我灵感
  2. 平均每个员工2000万!苹果为啥买下这家刚成立3年的AI创业公司?
  3. CVPR | BASNet:边缘感知的显著性物体检测
  4. 2020年 2 篇异常算法最佳综述
  5. 解决Python中sum函数出现的TypeError: unsupported operand type(s) for +: 'int' and 'list'错误问题
  6. oracle orm 实例 java_Oracle数据库的JDBC查询实例
  7. Effective C++阅读笔记
  8. Matlab如何实现建立ROS节点并进行实时通讯
  9. 学规划或GIS需要安装的软件
  10. oracle表与表之间更新,Oracle 两个表之间更新的实现