原文:MySQL SYS CPU高的案例分析(一)

【现象】

最近关注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 SYS CPU高的案例分析(一)的更多相关文章

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

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

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

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

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

    [现象] 最近关注MySQL CPU告警的问题时,发现有一种场景,有一些服务器最近都较频繁的出现CPU告警,其中的现象是 SYS CPU占比较高. 下面的截图来源于“MySQL CPU报警”采集的文件 ...

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

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

  5. CPU 上下文切换及案例分析

    什么是CPU 上下文 我们都知道,Linux是一个多任务操作系统,它远支持大于CPU数量的任务同时运行,当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短时间内,将CPU轮流分配给他们,造成 ...

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

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

  7. Java Mysql连接池配置和案例分析--超时异常和处理

    前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...

  8. MySQL服务器 IO 100%的案例分析

    [问题] 有台MySQL 5.6.21的数据库实例以写入为主,IO %util接近100% 写入IOPS很高 [分析过程] 1.通过iotop工具可以看到当前IO消耗最高的mysql线程 2.查看线程 ...

  9. MySQL服务器发生OOM的案例分析

    [问题] 有一台MySQL5.6.21的服务器发生OOM,分析下来与多种因素有关 [分析过程] 1.服务器物理内存相对热点数据文件偏小,62G物理内存+8G的SWAP,数据文件大小约550G 触发OO ...

随机推荐

  1. PHP通用非法字符检测函数集锦

    <? // [变量定义规则]:‘C_’=字符型,‘I_’=整型,‘N_’=数字型,‘L_’=布尔型,‘A_’=数组型 // ※CheckMoney($C_Money) 检查数据是否是 99999 ...

  2. ocx中用自定义消息去调用自定义事件

    硬件发送消息---->接收到消息后调用回调函数DWORD __stdcall CxxxCtrl::FVI_NotifyCallBack(void *FVINOTIFYCallbackCtx,UI ...

  3. ASIC DC综合的理解

    ASIC DC综合的理解 DC综合流程 输入设计文件+指定的工艺库文件+约束文件 经过DC的综合,输出满足期望的门级网表及综合报告 输入输出数据 输入文件:设计文件(verilog等).工艺库(db) ...

  4. thinkphp3.2 图片平均颜色值

    public function imgColor($imgUrl) { $imageInfo = getimagesize($imgUrl); //图片类型 $imgType = strtolower ...

  5. 【TP SRM 703 div2 500】 GCDGraph

    Problem Statement You are given four ints: n, k, x, and y. The ints n and k describe a simple undire ...

  6. jquery-9 京东和酒仙网左侧导航如何实现

    jquery-9 京东和酒仙网左侧导航如何实现 一.总结 一句话总结:布局的话多用定位,由底往上一层层的来布. 1.如何实现导航向div的平滑滑动? 右侧div和左侧的li一定要放在一起 127 &l ...

  7. An Overview of Cisco IOS Versions and Naming

    An Overview of Cisco IOS Versions and Naming http://www.ciscopress.com/articles/article.asp?p=210654 ...

  8. Powerful Bash-style command line editing for cmd.exe

    https://mridgers.github.io/clink/ Clink Powerful Bash-style command line editing for cmd.exe Downloa ...

  9. php中的foreach如何使用?

    php中的foreach如何使用? 一.总结 1.foreach (array_expression as $value) 2.foreach (array_expression as $key =& ...

  10. 创建数据库以及其属性的sql语句

    创建数据库的SQL语句: create database stuDB on primary -- 默认就属于primary文件组,可省略 ( /*--数据文件的详细描写叙述--*/ name='stu ...