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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gh0st远程控制——客户端界面编写(一)

1、新建一个基于对话框的MFC程序 ghost内核对unicode支持不好,所以不要勾选 在静态库使用MFC有助于我们的代码供别人使用 2、设置窗口可最大最小化 对话框 》右键属性 3、 为对话框添加列表 一个代表列表框架,一个代表日志框架 分别为2个控件添加唯…

SQL Povit函数使用及实例

PIVOT函数常用于数据的行转列&#xff0c;同时也可以用此函数实现类似于Excel中的数据透视表的效果。 PIVOT函数 PIVOT 函数的基本语法如下&#xff1a; -- PIVOT 语法 SELECT <非透视的列>,[第一个透视的列] AS <列名称>,[第二个透视的列] AS <列名称>,.…

Maxwell介绍

一、介绍 介绍&#xff1a;它读取MySQL binlog并将数据更改作为JSON写入Kafka、Kinesis和其他流媒体平台&#xff08;目前支持&#xff1a;kafka、RabbitMQ、Redis、file、Kinesis、Nats、Google Cloud Pub/Sub、Google Cloud Bigquery、SNS&#xff09; 版本&#xff1a;从v1.…

解决百度地图在模拟器上运行报 java.lang.IllegalArgumentException: No config chosen问题

解决百度地图在模拟器上运行报 java.lang.IllegalArgumentException: No config chosen 问题 1. 问题复现 在近期公司使用模拟器(网易MuMu)进行项目演示时&#xff0c;在进入存在百度地图(Android版本 7.4.2版本)之后&#xff0c;页面出现奔溃&#xff0c;后台日志为&#xf…

域环境权限提升

Windows系统配置错误 在Windows系统中&#xff0c;攻击者通常会通过系统内核溢出漏来提权&#xff0c;但是如果碰到无法通过系统内核溢出漏洞法国提取所在服务器权限的情况&#xff0c;就会系统中的配置错误来提权。Windows系统中常见哦欸之错误包括管理员凭证配置错误&#x…

Linux7 安装 Oracle 19C RAC 详细图文教程

实战篇&#xff1a;Linux7 安装 Oracle 19C RAC 详细图文教程 本文是按照&#xff1a;https://www.modb.pro/db/154424的思路进行编写 一、安装前规划 安装RAC前&#xff0c;当然要先做好规划。具体包含以下几方面&#xff1a; 节点主机版本主机名实例名Grid/Oracle版本Publi…

【论文简介】个性化真实人像生成方法(2024.01.15发布,即将开源)

零样本身份保留生成方法&#xff1a;声称效果好于PhotoMaker&#xff08;即将开源&#xff09; 2401.InstantID: Zero-shot Identity-Preserving Generation in Seconds &#xff1a; 项目主页&#xff1a;https://instantid.github.io/ 一、简介 本文的主要内容是介绍了一种…

【MATLAB】SVMD_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 SVMD-LSTM神经网络时序预测算法是一种结合了单变量经验模态分解&#xff08;Singular Value Decomposition&#xff0c;SVD&#xff09;和长短期记忆神经网络&#xff08;LSTM&#xff09…

十年很短,编程很难

前天冲浪看到的一篇文章&#xff0c;深有感触&#xff0c;翻译给大家一起看看吧 许多年前&#xff0c;当我仍是一名主修计算机科学的高年级学生时&#xff0c;我整天浏览各种在线招聘信息&#xff0c;希望能找到适合程序员的实习职位 除了实习职位&#xff0c;我偶尔也会点击一…

统计学R语言实验8 :线性回归

统计学R语言实验8 &#xff1a;线性回归 一、实验目的 1. 掌握理解线性回归的相关概念。 2. 掌握理解线性回归的相关方法。 3. 熟悉R语言等语言的集成开发环境。 二、实验分析与内容 完成教材P132的第2题 散点图 将 shouru 向量作为 x 轴&#xff0c;zhichu 向量作为 y 轴…

各模块的实现

注册模块&#xff1a; 注册使用手机号发送验证码注册的方式&#xff0c;使用的是阿里云的短信发送服务&#xff0c;然后进行认证&#xff0c;有个60s的时间&#xff0c;可以存到redis中&#xff0c;key是手机号&#xff0c;value是验证码。 使用Spring自带的BCryptPasswordEn…

《亚太教育》期刊投稿方式

《亚太教育》杂志是国家新闻出版总署批准的正规教育类期刊&#xff0c;旨在传播教育文化信息和动态&#xff0c;展示教育实践模式和经验&#xff0c;搭建教育科研成果交流平台。杂志将致力于服务教育事业的创新发展&#xff0c;传播教育文化新信息&#xff0c;展示教育实践新模…

java基础:求数组的最值

方法一&#xff1a;顺序查找 先假设数组第一个元素为最值&#xff0c;然后和数组里的数按顺序进行比较得出最值&#xff0c;所以叫顺序查找。 代码如下 package idea;public class arr_int {public static void main(String[] args) { // 初始化一个数组int[] arr {12…

第十一章 请求响应

第十一章 请求响应 1.概述2.请求-postman工具3.请求-简单参数&实体参数4.请求-数组集合参数5.请求-日期参数&JSON参数6.请求-路径参数7.响应-ResponseBody&统一响应结果8.响应-案例 1.概述 将前端发送的请求封装为HttpServletRequest对象 在通过HttpServletRespo…

经典数据库练习题及答案

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

freeswitch on centos dockerfile模式

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 centos7 docker上编译安装fs的流程记录&#xff0c;本文使用dockerfile模式。 环境 docker engine&#xff1a;Version 24.0.6 centos docker&#xff1a;7 freeswitch&#xff1a;v1.6.20 dockerfile 创建空目录…

基于springboot+vue的校园周边美食探索及分享平台系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件&#xff0c;也称为存储桶或对象事件。 您可能已经在利用 MinIO 事件与外部服务进行通信&#xff0c;现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力…

怎么处理vue项目中的错误详解

文章目录 一、错误类型二、如何处理后端接口错误代码逻辑问题全局设置错误处理生命周期钩子 三、源码分析小结参考文献 一、错误类型 任何一个框架&#xff0c;对于错误的处理都是一种必备的能力 在 Vue 中&#xff0c;则是定义了一套对应的错误处理规则给到使用者&#xff0…

一万六千字大章:Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析

Chrome 浏览器插件 V3 版本 Manifest.json 文件全字段解析 Manifest.json 文件格式 每个扩展程序的根目录中都必须有一个 manifest.json 文件&#xff0c;其中列出了有关该扩展程序的结构和行为的重要信息。 1、Demo 展示 1. 最小文件 {"manifest_version": 3,&quo…