【现象】

最近关注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参数,具体可参考下面的官方手册

https://dev.mysql.com/doc/refman/5.6/en/innodb-performance-spin_lock_polling.html

【问题重现】

在测试环境中,启用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处理能力。

【原创】MySQL CPU %sys高的案例分析(一)的更多相关文章

  1. MySQL CPU %sys 高的案例分析(三)

    [现象] 最近有台服务器晚上CPU告警,系统抓取的故障期间的snapshot显示CPU %sys较高,同时context switch在300K以上. 是否过高的context switch引起的%s ...

  2. 【原创】MySQL CPU %sys高的案例分析(二)

    后面又做了补充测试,增加了每秒context switch的监控,以及SQL执行时各步骤消耗时间的监控. [测试现象一] 启用1000个并发线程的压测程序,保持压测程序持续运行,保持innodb_sp ...

  3. MySQL SYS CPU高的案例分析(二)

    原文:MySQL SYS CPU高的案例分析(二) 后面又做了补充测试,增加了每秒context switch的监控,以及SQL执行时各步骤消耗时间的监控. [测试现象一] 启用1000个并发线程的压 ...

  4. MySQL SYS CPU高的案例分析(一)

    原文:MySQL SYS CPU高的案例分析(一) [现象] 最近关注MySQL CPU告警的问题时,发现有一种场景,有一些服务器最近都较频繁的出现CPU告警,其中的现象是 SYS CPU占比较高. ...

  5. MySql CPU彪高到百分之1000的排查思路

    You need to enable JavaScript to run this app.   原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等情况,可查看当前链接:https:// ...

  6. MySQL CPU 使用率高的原因和解决方法

    用户在使用 MySQL 实例时,会遇到 CPU 使用率过高甚至达到 100% 的情况.本文将介绍造成该状况的常见原因以及解决方法,并通过 CPU 使用率为 100% 的典型场景,来分析引起该状况的原因 ...

  7. 【MySQL】排序原理与案例分析

    前言 排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct语句都会隐 ...

  8. 服务器CPU使用率高的原因分析与解决办法

    我们的服务器在使用操作系统的时候,用着用着系统就变慢了,打开“ 任务管理器 ”一看,才发现CPU使用率达到80%以上.这是怎么回事情呢?遇到病毒了吗?硬件有问题?还是系统设置有问题呢?在本文中将从硬件 ...

  9. Mysql CPU占用高的问题解决方法小结

    通过以前对mysql的操作经验,先将mysql的配置问题排除了,查看msyql是否运行正常,通过查看mysql data目录里面的*.err文件(将扩展名改为.txt)记事本查看即可.如果过大不建议用 ...

随机推荐

  1. @Controller,@Service,@Repository,@Component详解

    @Controller 用来表示一个web控制层bean,如SpringMvc中的控制器. @Service 用来表示一个业务层bean. @Repository 用来表示一个持久层bean,即数据访 ...

  2. 【Codeforces858F】Wizard's Tour [构造]

    Wizard's Tour Time Limit: 50 Sec  Memory Limit: 512 MB Description Input Output Sample Input 4 5 1 2 ...

  3. OI,再见

    SDOI2016 因为自己的沙茶犯了低级的沙茶错误而滚粗. day2原可以AK,却因为眼残脑残只拿到90. 由此可见,细节永远不是一个小问题. 想想过去的日子,还真是舍不得. 但过去的终将过去,未来的 ...

  4. zedboard 初使用 -- 工具篇

    <一> 安装ISE和Vivada: <二> 安装USB转UART驱动 <三> 安装USB转JTAG驱动插件 http://blog.sina.com.cn/s/bl ...

  5. RGB, YUV及相关标准

    最近在一次排查问题的过程中发现色彩空间及色彩空间转换也有很多技术细节,而理清这些细节能帮助我们更准确的定位视频方面的问题. 1. 色彩空间 色彩空间一词源于英文的“Color Space”,色彩学中, ...

  6. Pythagorean Triples(Codeforces Round #368 (Div. 2) + 构建直角三角形)

    题目链接: https://codeforces.com/contest/707/problem/C 题目: 题意: 告诉你直角三角形的一条边,要你输出另外两条边. 思路: 我们容易发现除2外的所有素 ...

  7. mysql备份的 三种方式【转】

    备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据.那变化之后的呢?所以制定一个好的备份策略很重要. 一.备份的目的 做灾难恢复:对损坏的数据进行 ...

  8. c++语言知识点汇总

    c++ primer version-5 的整理 section 1: 内置类型和自定义类型: main函数的返回值:指示状态.0:成功:1:系统定义. unix和win系统中,执行完程序可以使用ec ...

  9. centos7 yum搭建lamp环境

    =============================================== 2018/1/14_第1次修改                       ccb_warlock == ...

  10. mysqlbinlog的日志类型

    一.mysqlbinlog简介 binlog又叫二进制日志文件,它会将mysql中所有修改数据库数据的Query以二进制的形式记录到日志文件中,如:create,insert,drop,update等 ...