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

news2024/11/24 3:57:26

☘️博主介绍☘️

✨又是一天没白过,我是奈斯,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.coloradmin.cn/o/1394163.html

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

相关文章

SpringBoot参数校验@Validated、@Valid

SpringBoot参数校验Validated、Valid(javax.validation) 一、应用场景 在实际开发中,前端校验并不安全,任何人都可以通过接口来调用我们的服务,就算加了一层token的校验,有心人总会转空子,来传…

如何禁用WordPress站点的管理员电子邮件验证或修改检查频率?

今天boke112百科登录某个WordPress站点时,又出现“管理员邮件确认”的提示,要求确认此站点的管理员电子邮箱地址是否仍然正确。具体如下图所示: 如果点击“稍后提醒我”,那么管理员邮件验证页面就会在3天后重新显示。 说实话&…

【JVM】JVM概述

JVM概述 基本介绍 JVM:全称 Java Virtual Machine,即 Java 虚拟机,一种规范,本身是一个虚拟计算机,直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作特…

大数据开发之Hadoop(MapReduce)

第 1 章:MapReduce概述 1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并…

我的隐私计算学习——联邦学习(4)

本篇笔记部分内容来源于这位老师的知识分享【公众号:秃顶的码农】,我从他的资料里学到了很多,期间还私信询问了一些困惑,都得到了老师详细的答复,相当nice! (六)横向联邦学习 — 梯度…

学习VUE-安装环境

下载安装Node.js 官网下载最新版本:https://nodejs.org/en/download/ 解压zip包 由于node.js默认安装了npm所以不用额外配置全局命令就可以使用npm命令 在cmd中输入node -v 和 npm -v就可以得到版本信息 配置一下目录: node.js环境配置 配置镜像 安装…

命令行参数环境变量和进程空间地址

文章目录 命令行参数环境变量进程地址空间 正文开始前给大家推荐个网站,前些天发现了一个巨牛的 人工智能学习网站, 通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站。 命令行参数 什么是命令行参数? 我…

✅稳定检索,高校嘉宾出席,2024年机械应用与机器视觉研究国际会议(ICMAMVR 2024)

2024年机械应用与机器视觉研究国际会议(ICMAMVR 2024) 数据库:EI,CPCI,CNKI,Google Scholar 等 2024 International Conference on Mechanical Applications and Machine Vision Research(ICMAMVR 2024) 一、【会议简介】 🎉🎉 2024年机械应用…

运维平台介绍:视频智能运维平台的视频质量诊断分析和监控中心

目 录 一、概述 二、框架图 1、图像过亮检测: 2、图像模糊检测: 3、画面冻结检测: 4、信号缺失检测: 5、图像偏色检测: 6、噪声干扰检测: 7、条纹干扰检测: 三、监控中心模…

electron+vite+vue3 快速入门教程

文章目录 前言一、electron是什么?二、electron 进程模型1.主进程2.渲染进程3.预加载脚本4.进程通信4.1 sendon(单向)4.2 invokehandle (双向)4.3 主进程向渲染进程发送事件 三、窗口创建与应用事件四、技术栈和构建工具五、electron-vite安装…

母线温度预测业务需求设计

1、需求背景 需求对象:设备使用方、设备维修人员 使用场景:使用方需要对母线温度进行实时监测和预警,及时排除安全隐患,保证长期正常运行。 使用目的:准确预测母线的未来温度,对于可能存在的隐患提前预警…

【C++】STL 算法 - 累加填充算法 ( 元素累加算法 - accumulate 函数 | 元素填充算法 - fill 函数 )

文章目录 一、元素累加算法 - accumulate 函数1、函数原型分析2、代码示例 二、元素填充算法 - fill 函数1、函数原型分析2、代码示例 一、元素累加算法 - accumulate 函数 1、函数原型分析 在 C 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 accu…

josef约瑟 三相电压继电器 WY-35A4 100V DC220V 导轨安装

三相 WY-35A4电压继电器;WY-35B4电压继电器;WY-35C4电压继电器;WY-31A4电压继电器;WY-31B4电压继电器; WY-31C4电压继电器;JY-45A4电压继电器;JY-45B4电压继电器;JY-45C4电压继电器…

CentOS使用docker本地部署StackEdit Markdown编辑器并实现公网访问

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保…

再获权威认证!紫光展锐5G芯片T820荣获国密二级安全认证

近日,紫光展锐系统级安全的高性能 5G SoC T820荣获国密二级认证,这是T820获得金融科技产品认证证书后,再次荣获的行业权威认证,标志着T820在金融安全能力和应用水准位居行业前沿水平。 荣获国密二级安全认证意味着紫光展锐T820满…

力扣1929.数组串联

前言 虽然力扣对我来说很难,但只要每天刷一点,就会慢慢增强能力,总有一天刷动力扣的难题,所以说,今天也是刷力扣的一天。 😆😆 /** * Note: The returned array must be malloced, assume call…

VSCode使用Makefile Tools插件开发C/C++程序

提起Makefile,可能有人会觉得它已经过时了,毕竟现在有比它更好的工具,比如CMake,XMake,Meson等等,但是在Linux下很多C/C源码都是直接或者间接使用Makefile文件来编译项目的,可以说Makefile是基石…

vue实现导出+ 样式修改

1.安装插件 npm install xlsx-style ^0.18.5 npm install xlsx -S ^0.8.13 2. 修改代码 node_modules里面找到 以下位置xlsx.js 搜索 write_ws_xml_data 替换成以下代码 function write_ws_xml_data(ws, opts, idx, wb) {var o [], r [], range safe_decode_range(…

Kubernetes增加master节点

一. 新增节点 无论是node节点还是master节点,kubelet、kubeadm、kubectl、CRI需要部署好, ### 新增node, 重新生成token, 复制加入即可, 前提是需要装上面的 kubectl kubeadm kubelet containerd 等 kubeadm token create --print-join-command### 新增 …

K8S对外服务ingress

Sevice作用体现在两个方面 集群内部 不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的ip地址不断发现的一种服务发现机制 集群外部 类似负载均衡器,把流量(ip端口),不涉及转发url(http ht…