数据库加压之JMeter篇
前言:在整个软件开发的过程中,我们希望尽可能的在前期将bug暴露出来,一来到后期bug的影响范围可能变大,甚至影响底层设计,一旦推翻重做太过“损伤元气”,二来前期解决可以大幅度节约成本,毕竟涉及资本运作。与此同时我们上线后日积月累随着用户的使用数据量的增加,很多问题就会暴露出来。综上所述通常在开发阶段就做好长远的打算,根据实际的业务场景在设计定稿后对数据库进行加压,在加压的环境下开发可以有效的避免上述问题。废话到此为止开始上干货,使用Jmeter工具依照实际业务对数据库进行加压。
一、前期准备
1.安装jdk1.8(此篇省略)
2.apache-jmeter-5.0(此篇以此版本为例)
3.数据库驱动包
4.数据库连接信息
5.业务数据计划加压指标
二、加压脚本编写
在安装好jdk1.8的环境上 双击apache-jmeter-5.0\bin目录下的ApacheJMeter.jar就可以打开jmeter就可以进行脚本的编写了
1.新建测试计划
打开之后默认创建测试计划,可以改名字
数据库驱动包在测试计划中引入
2.在测试计划上右键->线程(用户)->添加线程组
根据数据库配置可以开多线程对数据库进行加压
设置线程组数
3.在测试计划上右键->监听器->分别添加察看结果树和聚合报告
察看结果树可以查看每个请求的信息,请求报头,成功及失败日志信息等。
聚合报告可以从不同维度查看分析结果。
4.在线程组上右键->配置元件添加JDBC Connection Configuration
JDBC Connection Configuration 用于配置需要加压的数据库信息,声明连接池信息等
5.在线程组上右键->逻辑控制器添加循环控制器
一个线程内可以循环执行不同的脚本,一来提高加压效率,二来可以根据数据表1:n的关系添加业务需要的数据,比如一个会议有两个议题,在添加会议的脚本后可以添加一个循环控制器,循环次数配置成2,在循环器内添加议题信息的插入脚本即可。
6.在线程组或者循环控制器上右键->取样器->添加Bean Shell 取样器
Bean Shell 取样器可用于定义参数,id一般是随机的,所以通过java代码添加
7.在线程组或者循环控制器上右键->取样器->添加JDBC Request
JDBC Request用来编写数据库执行脚本
如图要填写
Variable Name of Pool declared in JDBC Connection Configuration:数据库连接池名称-前面在JDBC Connection Configuration声明的
Query Type:加压数据通常是inser语句所以Query Type 要选择Update Statement
其他参数讲解详见https://blog.csdn.net/frank_ldw/article/details/88396207
一般插入的id都不能是重复的,或者是和其他表有关联的,所以我们通常将id参数化’${mid}’,敲黑板参数要在添加JDBC Request之前定义好
有些参数是固定的,可以通过引入csv文件来设置
三、执行加压计划
实际业务场景可能比较复杂,每个项目都有自己的业务数据计划加压指标,所以我们可以根据指标在执行上做些文章。
场景一:要加压三年会议数据量30W
可用方案:设置线程组中线程数为100,循环控制器中循环次数为3000
场景二:30W的会议中有一半有两个议题,一半有五个议题
可用方案:分批次执行
a.设置线程组中线程数为100,最外层循环控制器中循环次数为1500,议题外的循环控制器循环次数为3
b.设置线程组中线程数为100,最外层循环控制器中循环次数为1500,议题外的循环控制器循环次数为5
以上为个人探索实践结果,仅供参考
编写完脚本设置好各参数后可点击绿色三角执行计划,如图
执行结果可点击察看结果树和聚合报告查看
第一次测试尽量将循环次数,线程数设置为1,以免产生垃圾数据
点击如图图标可清除察看结果树和聚合报告中的结果