https://mp.weixin.qq.com/s/vKJZp5cGUetHokGh2EZUXg

mysqlslap --iterations=100 --create-schema='test' --query="query.sql" --number-of-queries=20000 --delimiter=";" --concurrency=100

3.2.2 网络参数问题

  • 问题描述

使用 mysqlslap 压测某个语句,当并发数提升到200或400时,CDB性能下降,不符合业务预期。

  • 排查过程

这里只和高并发有关,CDB团队首先想到的是MySQL是否开启了thread pool功能,对于CDB和自建均未开启thread pool功能,而在CDB上打开了thread pool功能后问题仍然存在。而且在本地和远程压测都存在同样问题,这也排除了网络的因素。

有一个细节是CDB团队观察到压测过程中数据库的连接数并不稳定,忽上忽下,就开始怀疑是mysqlslap压测工具的问题。于是CDB团队开始查看mysqlslap源码, 确认mysqlslap用的是否是短连接。然而mysqlslap用的是长连接,并不是短连接。但有一种情况,当mysqlslap执行完一轮(number_of_querys)语句后会新建连接。当压测参数iterations设置较大,number_of_querys较小,并且调大并发数时,每个连接执行的语句相对就少了。也就是说,当并发数增大时,压测过程中的新建连接增加了。为了验证这个问题, CDB团队调大压测参数number_of_querys后,压测性能就上去了。

到这里,问题可以归结为大量建立连接影响了性能。于是CDB团队开始查找TCP相关系统参数的区别,通过修改主机参数tcp_rmem/tcp_wmem/tcp_max_syn_backlog/somaxconn,解决了高并发下的性能下降问题。

  • 问题原因

mysqlslap的实现方式是每次迭代都后重新建立连接,即所有客户端执行完number_of_queries数量的SQL后会重新建连连接,当并发增加时,每个客户端执行的sql相对较少,mysqlslap这种长连接测试方式退化类似于短连接的测试方式,而CDB主机对短连接处理的不是特别好。解决方案

修改主机参数, 提高了建立连接效率

tcp_rmem="4096 873800 4194304" (原"4096 87380 4194304", TCP receive memory buffers)

tcp_wmem = "4096 163840 4194304" (原"4096 16384 4194304", TCP send memory buffers)

tcp_max_syn_backlog=3240000 (原4096, sync queue size)

somaxconn = 2048(原128, accept queue size)

  • 方案效果

通过优化腾讯云CDB主机参数tcp_rmem/tcp_wmem/tcp_max_syn_backlog/somaxconn,解决了通过短连高并发下的性能下降问题。

MySQL 压测的更多相关文章

  1. 【JMeter】(3)---MySQL压测

    JMeter---MySQL压测 一.添加MySQL驱动jar包 在测试计划(Test Plan)页面添加jar包 二.添加MySQL连接配置 添加线程组右击-->添加(add)-->配置 ...

  2. JMeter使用教程2——MySQL压测

    之前写过一篇JMeter使用教程,只是介绍了http请求的压力测试,想到MySQL的测试也挺必要的,于是写下这篇记录一下.如果不知道怎么下载和安装,可以看一下上一篇关于JMeter的文章,地址是:ht ...

  3. jmeter进行MySQL压测

    jmeter怎么对数据库进行压测 目录 jmeter怎么对数据库进行压测 点击测试计划,再点击"浏览",把JDBC驱动添加进来: 然后添加配置元件 再添加一个采样器:JDBC re ...

  4. Mysql压测工具mysqlslap 讲解

    在mysql5.1以后的版本:客户端带了个工具mysqlslap可以对mysql进行压力测试: 可以使用mysqlslap --help来显示使用方法: Default options are rea ...

  5. MySQL压测中遇到的一些问题

    批量insert http://blog.csdn.net/xiaoxian8023/article/details/20155429 Mysql jdbc 批处理数据,需要给jdbc连接加上rewr ...

  6. sysbench 1.0.9 mysql 压测工具安装使用

    备注:    安装比较简单,可以使用源码或者使用yum 进行安装,本次测试使用yum    注意1.0 之后版本与老版本改动比较大,好多地方都有修改,本次测试使用    的mysql 使用docker ...

  7. mysql常用压测工具

    关键字:mysql压测工具 mysqlslap.sysbench  基准测试sysbench 压力测试 tpcc  具体怎么使用百度

  8. mysql集群压测

    mysql压测 mysql自带就有一个叫mysqlslap的压力测试工具,通过模拟多个并发客户端访问MySQL来执行压力测试,并且能很好的对比多个存储引擎在相同环境下的并发压力性能差别.通过mysql ...

  9. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

随机推荐

  1. 每日CSS_仿苹果平滑开关按钮

    每日CSS_仿苹果平滑开关按钮 2020_12_24 源码 1. 代码解析 1.1 html 代码解析 <div class="checkbox"> <div c ...

  2. MethodHandleVS反射

    Method Handle与反射 如无特殊说明,本文所有代码均基于JDK1.8.0_221 Method Handle入门 反射我们都知道,为我们提供了运行时对类的成员方法访问的手段,极大地提高了Ja ...

  3. 【Unity游戏开发】SpriteAtlas与AssetBundle最佳食用方案

    一.简介 在Unity步入2019.4以后,新版的SpriteAtlas日趋完善,已经完全可以在商业项目中使用了.但是纵观网络平台上,许多关于SpriteAtlas的文章还停留在2018的初版时期,其 ...

  4. App Shortcuts 快捷方式:Android 的 '3D Touch'

    Hello Shortcuts 从Android7.1(API level25)开始,开发者可以为自己的app定制shortcuts.shortcuts使用户更便捷.快速的使用app.我个人感觉有点像 ...

  5. Linux嵌入式学习-远程过程调用-Binder系统

    Binder系统的C程序使用示例IPC : Inter-Process Communication, 进程间通信RPC : Remote Procedure Call, 远程过程调用 这里我们直接只用 ...

  6. Arduino IDE开发ESP8266-01S连接MQTT服务器 控制继电器点亮LED

    准备条件: 1.Arduino IDE 2.ESP-01S模块 2.MQTT服务器 3.手机热点或路由器热点 Wi-Fi芯片 默认订阅的主题是  "开关控制" 当你发送主题  &q ...

  7. Python将GIF图片转换成png图片帧

    效果图: 转换之后保存到文件夹中: 代码如下:(第三方库pillow,安装方法:在cmd中输入:  pip install pillow) from PIL import Image import o ...

  8. Light Probes

    LightProbes (光照探针,光探测器?) 提供了一种方法用于捕获和使用 穿过场景中空白空间的 光(light)的信息. 和光照贴图相似(lightmaps),Light Probes也存储关于 ...

  9. java中网络通信 Scoket

    在客户/服务器通信模式中,客户端需要主动建立与服务器连接的Socket,服务器端收到客户端的连接请求,也会创建与客户端连接的Socket.Socket可以看做是通信连接两端的收发器,客户端和服务店都通 ...

  10. 网络爬虫第一步:通用代码框架(python版)

    import requests def getHTMLText(url):     try:         r=requests.get(url,timeout=30)         r.rais ...