博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL SYS CPU高的案例分析(一)
阅读量:5170 次
发布时间:2019-06-13

本文共 1019 字,大约阅读时间需要 3 分钟。

原文:

【现象】

最近关注MySQL CPU告警的问题时,发现有一种场景,有一些服务器最近都较频繁的出现CPU告警,其中的现象是 SYS CPU占比较高。

下面的截图来源于“MySQL CPU报警”采集的文件

 

 

【问题分析】

可以分析出这服务器CPU升高的原因是由于表的高并发写入引起。优化方案通常是通知开发停止写入或降低写入频率。

究竟是什么原因导致高并发写入时CPU sys的占比这么高。

从采集的【Perf Stat】指标看到CPU有大量消耗是集中kernel的spin_lock上,推测sys的消耗占比是由spin lock引起的

同时从这个系统调用中也可以比较清晰的看出一个INSERT语句的执行过程(只是执行路径上的部分关键函数),简单整理如下:

 

insert当获取不到rw-lock时,保持spin lock,进入短暂等待。高并发的大量访问出现资源竞争,大量线程出现spin lock及context switch,导致CPU飙升。

为了防止自旋锁循环过快,耗费CPU,MySQL中引入了innodb_spin_wait_delay参数,具体可参考下面的官方手册

 

【问题重现】

在测试环境中,启用1000个并发线程模拟高并发写入的场景

 

1、innodb_spin_wait_delay和innodb_sync_spin_loops保持默认值不变

 

CPU idle在18%左右,sys占比40%多,TPS在1.5W左右

 

 

2、将变量适当增大SET GLOBAL innodb_spin_wait_delay=18;

(注意:18是在Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz 40核的CPU经过多次测试得出的相对合理的值,建议该值大小不要超过24)

可以观察到CPU idle在15%左右,sys占比降到20%多,TPS增加到1.75W左右,MySQL的插入性能约提升了16.7%

 

 

【结论】

对于MySQL高并发写入的场景,我们可以通过微调innodb_spin_wait_delay参数,减少kernel的spin_lock消耗,降低CPU的sys占比,从而提升MySQL的TPS处理能力。

 

posted on
2018-10-21 16:14 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/9825431.html

你可能感兴趣的文章
3.4 数据更新
查看>>
java拷贝字符文件
查看>>
POJ 2234
查看>>
HTTP请求与响应协议
查看>>
最新wp建站做淘宝客系统教程(共6课)附源码
查看>>
半边数据结构(The_Half-Edge_Data_Structure)
查看>>
获取全部校园新闻
查看>>
jquery
查看>>
【BZOJ】1085 [SCOI2005]骑士精神(IDA*)
查看>>
css3部分知识点
查看>>
2.列表,元组
查看>>
C#效率优化(2)-- 方法内联
查看>>
几处费解的知识点
查看>>
servlet的请求转发与重定向
查看>>
1121 - Reverse the lights 思维题
查看>>
阈值分割-Otsu法
查看>>
2018软工实践K班总结
查看>>
python之路_mysql数据操作1
查看>>
python之路_保留原搜索页面条件
查看>>
韩顺平的java入门到精通中serversql笔记(包括emp表和dept表,linux的mysql版)
查看>>