JMter工具对MySQL压力测试

发布时间 2023-07-24 09:25:56作者: 宜家数据小哥

一、下载JMeter

1、下载

  地址:https://jmeter.apache.org/download_jmeter.cgi

2、解压

 

3、配置环境变量

4、设置中文语言

  在安装目录的bin目录下找到jmeter.properties文件,修改39行中的:

#language=en

  为:

language=zh_CN

5、cdm输入jmeter启动应用

二、MySQL压测

1、前期准备

  (1)创建测试计划

  (2)添加mysql依赖包

  (3)创建线程组

2、获取查询SQL(业务方提供)

select * from 表名 where OrdTime >= '${OrdTime}' and OrdTime <= '${__timeShift(yyyy/MM/dd HH:mm:ss,,P1d,,${OrdTime})}' and storeGid = ${storeGid} ORDER BY CreationTime DESC LIMIT 10;

3、获取测试基准(产品方提供)

4、基于测试基准获取测试基线数据

  (1)修改测试计划并命名为DDM

  (2)在测试计划下创建线程组并以库名.表名的形式进行重命名,比如:A库.A表

  (3)在该线程组中调整线程数为1(以1/100/1000分三组进行测试,因为MySQL有缓存的原因,因此每组需要测试2次,第一次未命中缓存,第二次可能会命中缓存)

  (4)在线程组下新建一个JDBC Connection Configuration并配置相关参数

  (5)在线程组下新建一个JDBC Requests,并将相关参数填上

select * from xxx表 where OrdTime >= '${OrdTime}' and OrdTime <= '${__timeShift(yyyy/MM/dd HH:mm:ss,,P1d,,${OrdTime})}' and storeGid = ${storeGid} ORDER BY CreationTime DESC LIMIT 10;

    参数介绍:

      Query:填写要被执行的SQL语句
      Parameter values:参数值
      Parameter types :参数类型
      Variable names:保存sql语句返回结果的变量名
      Result variable name:创建一个对象变量,保存所有返回的结果
      Query timeout:查询超时时间
      Handle result set:定义如何处理由callable statements语句返回的结果

  (6)使用Navicat工具连接MySQL,复制所需要的表,仅表结构

  (7)通过insert的方式将复制表写入5万条数据(由于数据量过大,每次查询不同间隔的时间查询1万条数据,这样快一些,凑够5万条数据即可)

insert into xxx_copy1
select * from xxx
where OrdTime >= '20230713' and OrdTime < '20230716'
limit 10000;

  (8)复制表有了数据之后就可以导出复制表中的数据为CSV文件

  (9)Jmeter添加:CSV 数据文件设置(SQL语句中的变量会通过CSV文件进行随机读取,变量的使用方式为:${变量名})

  (10)添加查看结果树、聚合报告、汇总报告

  (11)启动线程组

  (12)依次获取1/100/1000线程平均响应时间并将该值填写到云文档中,供产品方参考(测试完一组之后将测试结果清除再继续)

    参数介绍:

      样本数= 用户数*循环次数
      平均值:单个请求的平均响应时间,单位ms
      中位数:50%用户的请求时间,单位ms
      90百分位:90%用户的请求时间,单位ms
      最小值:单个请求最小的响应时间,单位ms
      最大值:单个请求的最大的响应时间,单位ms
      异常%:有问题的请求数/样本
      吞吐量:单位不定,慢的时候是请求数/小时,即单位小时内的请求数,快的时候是 :请求数/秒,即每秒中的请求数,需要自己换算
      接收kb/sec :每秒从服务器端接收到的数据量
      发送kb/sec:每秒从服务器发送的数据量

  (13)经过压力测试得知,最大数据量的那张表100并发,平均响应时间在4754ms,因此压测结论是:100并发会在5s内返回响应数据

5、过载测试

  由于DDM没有过载保护机制,若进行过载测试可能会将数据库搞崩,故过载测试暂不执行。

  TPS(系统吞度量)= 并发数/平均响应时间。一般进行过载测试都是进行 tps*1.25、tps*4、tps*10 进行