MySQL篇—性能压测工具mysqlslap介绍

☘️博主介绍☘️

✨又是一天没白过,我是奈斯,DBA一名✨

✌️擅长Oracle、MySQL、SQLserver、Linux,也在积极的扩展IT方向的其他知识面✌️

❣️❣️❣️大佬们都喜欢静静的看文章,并且也会默默的点赞收藏加关注❣️❣️❣️

    今天给大家介绍一下MySQL附带的性能压测工具mysqlslap,在数据库性能优化和测试中,一个不可或缺的工具就是MySQL的性能压测工具mysqlslap。作为MySQL附带的一个诊断程序,mysqlslap的目标是模拟MySQL服务器所面临的客户端负载,从而提供对服务器性能的深入了解。通过模拟多用户并发访问,它能够报告每个阶段的时间,帮助我们更准确地评估数据库在实际负载下的性能表现。

    mysqlslap 的一个主要工作场景就是对数据库服务器做基准测试,是MySQL从5.1.4后自带的压力测试工具,通过模拟多个并发客户端访问MySQL来执行压力测试,同时详细的提供了“高负荷攻击MySQL”的数据性能报告。并且能很好的对比多个存储引擎在相同环境下的并发压力性能差别。

    如果你觉得我的文章有帮助,或者对我的观点感兴趣,那么请关注我吧!

目录

1、单个客户端运行1遍压测 

2、并发500个客户端运行2遍压测 

3、并发100和500个客户端运行5遍压测innodb存储引擎的性能进行对比 

4、使用自定义sql脚本执行测试,将DQL语句在脚本中运行(更真实,使用大量真实存在的表进行DQL和DML)


mysqlslap作用:

    如果准备拿一台服务器做为数据库服务器,那么这台服务器的硬件资源能够支持多大的访问压力呢?优化了操作系统的内核参数后是否提升了性能?调整了MySQL配置参数后对性能有多少影响?

    通过一系列的调优工作,配合基准测试mysqlslap工具,就可以把这台服务器调整到最佳状态,也掌握了健康状态下的性能指标。那么在以后在实际运行过程中,当监控项接近了基准指标时,说明数据库服务器快要满负荷了,需要分析数据库结构设计、SQL语句这类用法问题,还是硬件资源的确不够了,然后进行相应的处理。数据库服务器也可能需要硬件升级,升级之后也需要进行基准测试,和之前的测试结果对比,确保升级后的性能是提升的,防止不恰当的升级或者错误的配置引起性能下降。

  

mysqlslap的运行分为三个阶段:

第一阶段:创建用于测试的模式、表和可选的任何存储程序或数据。这个阶段使用单个客户端连接。

第二阶段:运行负载测试。这个阶段可以使用许多客户端连接。

第三阶段:清理(断开连接,删除表格,如果指定)。这个阶段使用单个客户端连接。

  

mysqlslap --help选项:

-u, --user=用于连接到服务器的MySQL帐户的用户名。

-p, --password=连接到服务器时使用的密码。

-S, --socket=指定用于连接的套接字文件的名称,socket套接字就是ip+端口,包括本地ip:port, 远程ip:port)。如果系统上有多个实例,通过连接socket可以连接相应的实例,socket可以用户连接到那个实例。

-q, --query=:指定自定义的测试SQL语句,不会加上DROP SCHEMA、CREATE SCHEMA、use、DROP SCHEMA语句。一般针对select语法语句。如果自动生成测试SQL需要使用--auto-generate-sql参数。

--create=name指定自定义的测试SQL语句,会加上DROP SCHEMA、CREATE SCHEMA、use、DROP SCHEMA语句。如果自动生成测试SQL需要使用--auto-generate-sql参数。

-a, --auto-generate-sql:当文件中未提供或未使用命令选项(--create or --query)时,自动生成测试SQL语句和测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。手动指定测试SQL需要使用--create or --query参数,并且这个参数不能和--create、--query同时使用。

--no-drop使用 --auto-generate-sql参数会在生产测试库mysqlslap先删除(DROP SCHEMA IF EXISTS)然后测试完成后再删除(DROP SCHEMA IF EXISTS),如果加上此参数那么就不会删除测试库mysqlslap了。

--create-schema=运行测试的架构(数据库名),不指定默认为mysqlslap库。

-c, --concurrency=:表示会话连接并发量,也就是模拟多少个客户端同时执行select。也可指定多个值以逗号或者--delimiter参数指定的值做为分隔符,如:--concurrency=100,200,500。

-i, --iterations=:迭代遍数,同样的环境下整体运行几遍,默认1遍。如果只运行一遍那么Average、Minimum、Maximum的结果都是相同的,所以要在同样的环境下运行多遍才能反应真实的结果。

-F, --delimiter=:在文件或使用命令选项提供的SQL语句中使用的分隔符是什么。

--number-of-queries=:指定总的测试查询次数(并发客户端数--concurrency * 每个客户端的查询次数)。如:--number-of-queries=1000,--concurrency=100,那么每个客户端平均查询10次

-e, --engine=:用于创建表的存储引擎。

--auto-generate-sql-load-type=:指定测试负载类型。允许的值是read(读,scan tables)、write(写,insert into tables)、key(键,read primary keys)、update(更新,update primary keys)或mixed(混合,half inserts, half scanning selects)默认为mixed。

--auto-generate-sql-add-autoincrement添加一个AUTO_INCREMENT列添加到自动生成的表中。

-x, --number-char-cols=自动生成的测试表中包含多少个字符类型的列,默认1。如果测试表字符类型只有1个那么测试结果不真实。

-y, --number-int-cols=:自动生成的测试表中包含多少个数字类型的列,默认1。如果测试表数字类型只有1个那么测试结果不真实。

--only-print:打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。

  

mysqlslap输出结果详解:

Average number of seconds to run all queries    运行所有语句一遍的平均秒数   

Minimum number of seconds to run all queries    运行所有语句总遍的某一个的最小秒数

Maximum number of seconds to run all queries    运行所有语句总遍的某一个的最大秒数

Number of clients running queries               客户端数量

Average number of queries per client            每个客户端运行查询的平均数

   

1、单个客户端运行1遍压测 

[root@mgr1 ~]# mysqlslap --auto-generate-sql -uroot -p'123456' -S /mysql/data/3306/mysql.sock

注:加上--only-print参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。使用--auto-generate-sql参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。

对输出的内容进行解释:

    一个客户端同时运行--auto-generate-sql生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。

    一个客户端运行一遍的平均秒数0.151,总遍的某一个的最小秒数0.151,总遍的某一个的最大秒数0.151。因为只运行了1遍所以所有的值相同。

  

2、并发500个客户端运行2遍压测 

[root@mgr1 ~]# mysqlslap --auto-generate-sql --concurrency=500 --iterations=2 -uroot -p'123456' -S /mysql/data/3306/mysql.sock

注:加上--only-print参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。使用--auto-generate-sql参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。

对输出的内容进行解释:

    500个客户端同时运行--auto-generate-sql生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。

    500个客户端运行一遍的平均秒数10.046,总遍的某一个的最小秒数8.974,总遍的某一个的最大秒数11.119。因为运行了2遍那么一遍的平均秒数=(总的最小秒数+总的最大秒数)/2。

  

3、并发100和500个客户端运行5遍压测innodb存储引擎的性能进行对比 

[root@mgr1 ~]# mysqlslap --auto-generate-sql --concurrency=100,500 --iterations=5 --engine=innodb -uroot -p'123456' -S /mysql/data/3306/mysql.sock

注:加上--only-print参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。使用--auto-generate-sql参数自动生成测试库mysqlslap,然后测试完成再删除,不会在数据库中留下痕迹。

对输出的内容进行解释:

    100或500个客户端同时运行--auto-generate-sql生成的语句算一遍,计算一遍的总时间,不是某一个客户端运行时间。

    100个客户端运行一遍的平均秒数1.101,总遍的某一个的最小秒数0.897,总遍的某一个的最大秒数1.316。

    500个客户端运行一遍的平均秒数9.068,总遍的某一个的最小秒数8.486,总遍的某一个的最大秒数9.455。

    因为客户端是5倍之差所以一遍的平均秒数,总遍的某一个的最小秒数,总遍的某一个的最大秒数也是在5倍左右。

4、使用自定义sql脚本执行测试,将DQL语句在脚本中运行(更真实,使用大量真实存在的表进行DQL和DML)

[root@mgr1 ~]# vi q.sql

select * from itpux_m1;      ---数据库中真实存在的表。1万行,在itpuxdb数据库中
select * from itpux_m5;      ---数据库中真实存在的表。5万行,在itpuxdb数据库中

[root@mgr1 ~]# mysqlslap --concurrency=100 --iterations=3 --create-schema=itpuxdb --query=q.sql --delimiter=";" -uroot -p'123456' -S /mysql/data/3306/mysql.sock

注:加上--only-print参数为打印生成实际执行的测试SQL语句,不会实际执行(仅用于浏览将要执行的SQL)。

总结:

    100个客户端同时运行select * from itpux_m5和itpux_m1算一遍,计算一遍的总时间,不是某一个客户端运行时间。

    100个客户端运行一遍的平均秒数19.189,总遍的某一个的最小秒数18.725,总遍的某一个的最大秒数19.472。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 安装 MongoDb4

Docker 安装mongoDb 获取mongodb安装参考 获取mongodb 注意: WARNING: MongoDB 5.0 requires a CPU with AVX support, and your current system does not appear to have that! **hub官网(需要梯子):**https://hub.docker.com/_…

WAF攻防相关知识点总结1--信息收集中的WAF触发及解决方案

什么是WAF WAF可以通过对Web应用程序的流量进行过滤和监控,识别并阻止潜在的安全威胁。WAF可以检测Web应用程序中的各种攻击,例如SQL注入、跨站点脚本攻击(XSS)、跨站请求伪造(CSRF)等,并采取相…

Node.js基础---fs文件系统 读取和写入

什么是nodejs? 脚本语言需要一个解析器才能运行,JavaScript是脚本语言,在不同的位置有不一样的解析器,如写入html的js语言,浏览器是它的解析器角色。而对于需要独立运行的JS,nodejs就是一个解析器。 每一种解析器都是…

详细介绍IP 地址、网络号和主机号、ABC三类、ip地址可分配问题、子网掩码、子网划分

1、 IP 地址: 网络之间互连的协议,是由4个字节(32位二进制)组成的逻辑上的地址。 将32位二进制进行分组,分成4组,每组8位(1个字节)。【ip地址通常使用十进制表示】ip地址分成四组之后,在逻辑上,分成网络号和主机号 2…

适合初学者的机器学习开源项目合集(已加入Github加速计划)

目录 开源项目合集[>> 机器学习路线图:mrdbourke/machine-learning-roadmap](https://gitcode.com/mrdbourke/machine-learning-roadmap)[>> 机器学习资源的汇总:johnmyleswhite/ML_for_Hackers](https://gitcode.com/johnmyleswhite/ML_for…

vue+elementUI el-select 中 没有加clearable出现一个或者多个×清除图标问题

1、现象:下方截图多清除图标了 2、在全局common.scss文件中加一个下方的全局样式noClear 3、在多清除图标的组件上层div加noClear样式 4、清除图标去除成功

Linux centos中find命令的多种用途:按照具体应用来详细说明find的用法举例

目录 一、find命令 二、find命令的语法 (一)语法格式 (二)选项 1、选项(option)介绍 2、控制符号链接的option 3、调试选项debugopts 4、优化选项 (三)表达式expression 1、选项options 2、测试…

Linux安装ossutil工具且在Jenkins中执行shell脚本下载文件

测试中遇到想通过Jenkins下载OSS桶上的文件,要先在linux上安装ossutil工具,记录安装过程如下: 一、下载安装ossutil,使用命令 1.下载:wget https://gosspublic.alicdn.com/ossutil/1.7.13/ossutil64 2.一定要赋权限…

6.3.5编辑视频

6.3.5编辑视频 除了上面的功能外,Camtasia4还能进行简单的视频编辑工作,如媒体的剪辑、连接、画中画等。 下面我们就利用Camtasia4的强大功能来实现一个画中画效果,在具体操作之前,需要准备好两个视频文件,一个作为主…

基于SIFT算法的图像匹配

基本概念 尺度不变特征转换(Scale-invariant feature transform,简称SIFT) ,是一种用来侦测与描述影像中的局部性特征的算法,它在空间尺度中寻找极值点,提取位置、尺度、旋转不变量,生成特征描述子。 SIFT算法的实质是…

esp32-idf eclipse 定时器的使用demo

esp32定时器的使用demo 1、介绍 ESP32芯片包含两个硬件定时器组。每组有两个通用硬件定时器。它们都是基于16位预分频器和64位自动重载功能的向上向下计数器的64位通用定时器。 2、API接口函数 创建定时器函数: esp_timer_create(); esp_err_t esp_timer_create …

触摸按键控制LED灯

目录 1.理论 2.代码 2.1 touch_ctrl_led.v 2.2 tb_touch_ctrl_led 1.理论 以上的波形图的touch_flag是采用组合逻辑的方式产生的。 以上的touch_flag是采用时序逻辑产生的,时序逻辑会延迟一拍。 以上是上升沿和下降沿的组合逻辑和时序逻辑实现,逻辑或…

微信小程序 - 导航 、wxs及生命周期函数

导航 声明式导航 使用<navigator></navigator>标签 属性类型默认值必填说明targetstringself否在哪个目标上发生跳转&#xff0c;默认当前小程序urlstring否当前小程序内的跳转链接open-typestringnavigate否跳转方式 target参数 属性值说明self当前小程序min…

书生·浦语大模型实战营第五节课笔记及作业

LMDeploy 大模型量化部署实践 1 大模型部署背景 1.1 模型部署及大模型特点 1.2 大模型部署挑战及方案 2 LMDeploy简介 2.1 核心功能-量化 2.2 核心功能-推理引擎TurboMind 2.1 核心功能-推理服务api server 3 动手实践及作业 按照文档LMDeploy 的量化和部署中的步骤在Intern…

【4k】4k的webrtc播放示例

目录 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数 使用带研发角色的账号&#xff0c;在app端设置下分辨率 &#xff1a; 4k 点播 ffplay播放看下详细的参数

解决Windows下VSCode控制台乱码问题

我们在Windows使用VSCode编写C/C程序时&#xff0c;如果代码中的中文字符串使用的是UTF8编码&#xff0c;且代码内没有设置控制台的输出编码&#xff0c;或者编译时没有指定运行时编码&#xff08;GCC可以在编译时使用-fexec-charsetGBK来指定运行时的字符串编码&#xff1b;cl…

将AI的潜能转化为人类的福祉

在这个技术迅速发展的时代&#xff0c;AI不仅是一项突破性的技术&#xff0c;更是人类未来的关键。作为一名AI训练师&#xff0c;我的目标不仅仅是开发先进的AI产品&#xff0c;更重要的是让这些产品服务于人类&#xff0c;改善人们的生活。 我相信&#xff0c;AI的真正价值在于…

MFC 绘图

目录 MFC中绘图 CPaintDC&#xff0c;封装了在WM_PAINT消息中绘图的绘图设备 CClientDC类&#xff0c;封装了在客户区绘图的绘图设备 CGdiObject类(绘图对象类)&#xff0c;封装了各种绘图对象相关的操作 MFC中绘图 Windows绘图需要绘图设备&#xff0c;Win32&#xff1a;…

pyqtgraph绘图类

pyqtgraph绘图类 pyqtgraph绘图有四种方法: 方法描述pyqtgraph.plot()创建一个新的QWindow用来绘制数据PlotWidget.plot()在已存在的QWidget上绘制数据PlotItem.plot()在已存在的QWidget上绘制数据GraphicsLayout.addPlot()在网格布局中添加一个绘图 上面四个方法都接收同样…

OpenHarmony应用开发-进程间通讯

版本&#xff1a;v3.2 Beta5 进程模型 OpenHarmony的进程模型如下图所示&#xff1a; 应用中&#xff08;同一包名&#xff09;的所有UIAbility、ServiceExtensionAbility、DataShareExtensionAbility运行在同一个独立进程中&#xff0c;即图中绿色部分的“Main Process”。…