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.hqwc.cn/news/414345.html

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

相关文章

给程序加个进度条吧!1行Python代码,快速搞定~

你在写代码的过程中,有没有遇到过以下问题? 已经写好的程序,想看看程序执行的进度? 在写代码批量处理文件的时候,如何显示现在处理到第几个文件了? 👆如上图所示的进度条是一个最好的解决方法…

Docker中创建并配置MySQL、nginx、redis等容器

Docker中安装并配置MySQL、nginx、redis等 文章目录 Docker中安装并配置MySQL、nginx、redis等一、创建nginx容器①:拉取镜像②:运行nginx镜像③:从nginx容器中映射nginx配置文件到本地④:重启nginx并重新配置nginx的挂载 二、创建…

大语言模型系列-BERT

文章目录 前言一、BERT的网络结构和流程1.网络结构2.输入3.输出4.预训练Masked Language ModelNext Sentence Predictionloss 二、BERT创新点总结 前言 前文提到的GPT-1开创性的将Transformer Decoder架构引入NLP任务,并明确了预训练(学习 text 表征&am…

vim 编辑器如何同时注释多行以及将多行进行空格

一、场景 YAML文件对空格的要求非常严格,因此在修改YAML时,我们可能需要批量添加空格。 二、操作步骤 请注意:您的所有操作都将以第一行为基准。也就是说,第一行有多少个空格,下面的行就会模仿添加相同数量的空格。…

Spring WebSocket实现实时通信的详细教程

简介 WebSocket 是基于TCP/IP协议,独立于HTTP协议的通信协议。WebSocket 连接允许客户端和服务器之间的全双工通信,以便任何一方都可以通过已建立的连接将数据推送到另一方。 我们常用的HTTP是客户端通过「请求-响应」的方式与服务器建立通信的&#x…

Ubuntu 22.04.1 LTS VirtualBox7.0 解决虚拟机窗口失去焦点一段时间后,虚拟机显示不刷新问题

故障描述: virtualbox安装在ubuntu系统上,虚拟机内安装了windows操作系统。使用中发现,当linux系统窗口被激活,如firefox浏览器,虚拟机的显示一段时间后会暂停刷新,鼠标划入虚拟机窗口后,才会立…

mysql数据迁移报错Specified key was too long; max key length is 767 bytes

目录 场景: 说明: 疑问: 解决: 验证: 场景: 线上项目支持的过程中遇到mysql库表结构和数据由A库迁移到B库上提示Specified key was too long; max key length is 767 bytes报错,第一次遇到特此…

Rust之旅 - Rust概念、Windows安装、环境配置

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 系列专栏目录 [Java项目…

生成式对抗网络GAN

Generative Adversarial Nets由伊恩古德费洛(Ian J.Goodfellow)等人于2014年发表在Conference on Neural Information Processing Systems (NeurIPS)上。NeurIPS是机器学习和计算神经科学领域的顶级国际学术会议之一。 1. GAN在哪些领域大放异彩 图像生…

目标检测--02(Two Stage目标检测算法1)

Two Stage目标检测算法 R-CNN R-CNN有哪些创新点? 使用CNN(ConvNet)对 region proposals 计算 feature vectors。从经验驱动特征(SIFT、HOG)到数据驱动特征(CNN feature map),提高特…

【计算机网络】(1)OSI七层模型、协议、交换技术、路由器技术

文章目录 计算机网络功能与分类计算机网络的定义计算机网络的功能计算机网络的指标计算机网络的性能指标计算机网络的非性能指标 计算机网络的分布范围以及拓扑结构划分图计算机网络分类总线型拓扑星型拓扑环形图拓扑树型拓扑分布式拓扑 通信技术信道物理信道逻辑信道 发信机OS…

基于Java网上鲜花商城系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…