jmeter 压测数据库


当前版本:

  • jmeter 5.6.3
  • mysql 5.7.39

简介

    JMeter 是一个开源的 Java 应用程序,主要用于进行性能测试和负载测试。它支持多种协议,包括但不限于 HTTP、HTTPS、FTP、JDBC 以及各种 Web Services。对于数据库的压力测试可以使用 JDBC 协议与数据库进行通信。

        

文章目录如下

1. 怎么实现高并发

2. 配置压测的基本流程

2.1. 设置线程组

2.2. 配置数据库连接串

2.3. 构造简单业务

2.4. 配置监听器

2.5. 执行测试

3. 业务并发分配


        

1. 怎么实现高并发

jmeter 通过如下组件来构造高并发:

线程组    # 模拟多个并发用户
JDBC Connection Configuration  # 配置数据库连接信息
JDBC Request  # 构造业务

通过如下监听器来查看性能指标

聚合报告    # 查看整体性能指标
jp@gc - Response Times Over Time  # 查看响应时间走势图表
jp@gc - Transactions per Second   # 查看吞吐量走势图表

        

在压测过程中,一般采用逐步增长并发数的方案来确定程序的承受能力:

  1. 首先确定吞吐量不低于多少,或者响应时间不高于多少。
  2. 确定需求后开始测试,第1次压测线程数设置与cpu数量相同。例如128,压测过程中检查吞吐量走势是否存在波动或下降的趋势。如果存在下降的趋势检查硬件是否出现瓶颈,检查数据库慢SQL原因。
  3. 如果第1次压测没有性能下跌,那么加大并发数。并发数以成倍数增长,比如第1次并发128,那么第2次256、第3次512,直到出现性能下跌或超出要求的吞吐量。
  4. 如果硬件和业务已经没有优化点了,那么我们只需要加压即可。例如要求达到10w吞吐量,检测程序的最大压力。如果配置的128并发吞吐量达到20w,那么可以持续加压,直到吞吐量只有10w。假如压测2000个并发持续1小时吞吐量都能平稳在10w,则表示符合要求,那么程序10w吞吐量的最大压力可达到2000个用户并发。

        

数据库的详细配置见另一篇文章:

https://blog.csdn.net/m0_61066945/article/details/135829691

        

性能监听器下载地址:

https://jmeter-plugins.org/downloads/old/

将下载的两个zip包解压后,找到 JMeterPlugins-Standard.jar 和 JMeterPlugins-Extras.jar,放到 jmeter\lib\ext\ 下,重启 jmeter 生效。

        

2. 配置压测的基本流程

2.1. 设置线程组

  • 右击测试计划 → 添加 → 线程(用户) → 线程组

我的笔记本性能差,所以只设定了10个线程

        

2.2. 配置数据库连接串

  • 右击测试计划 → 添加 → 配置元件 → JDBC Connection Configuration

"""MySQL"""
URL:jdbc:mysql://[IP]:[端口]/[数库名]  # jdbc:mysql://localhost:3306/mysql
Driver:com.mysql.jdbc.Driver
"""Oracle"""
URL:jdbc:oracle:thin:@[IP]:[端口]:[数库名]  #jdbc:oracle:thin:@localhost:1521:orcl
Driver:oracle.jdbc.OracleDriver
"""PostgreSQL"""
URL:jdbc:postgresql://[IP]:[端口]/[数库名]  # jdbc:postgresql://localhost:5432/postgres
Driver:org.postgresql.Driver

        

2.3. 构造简单业务

  • 右击线程组 → 添加 → 取样器 → JDBC Request

简单的读语句(仅举例)

简单的写语句(仅举例)

        

2.4. 配置监听器

  • 右击线程组 → 添加 → 监听器 → 聚合报告
  • 右击线程组 → 添加 → 监听器 → jp@gc - Response Times Over Time
  • 右击线程组 → 添加 → 监听器 → jp@gc - Transactions per Second

监听器主要开启 "聚合报告"、"吞吐量走势" 和 "响应时间走势",对于 "查看结果树" 不建议配置。因为压测过程中业务会持续运行,在这期间开启 "查看结果树" 会不断返回响应信息,这对压力机的内存消耗很大。一般在保证错误率为0后,都会将 "查看结果树" 注释。

配置案例如下:

        

2.5. 执行测试

点击启动按钮

        

压测结束后先查看聚合报告

    上图聚合报告输出的2行数据,这两行分别是自定义的 select 业务和 insert 业务。我们主要关心这几个指标:平均响应时间、95%响应时间、异常率、吞吐量。

    响应时间以 ms 为单位,从上图看 select 业务95%响应时间为 164ms。这是因为业务非常简单,所以响应比较快,总的来说可以接受。insert 业务95%响应时间为 26ms,比 select 业务快6倍左右,这也是业务简单,所以响应较快。

    吞吐量就是我们常说的TPS/s,每秒执行完成多少个事务。这里的吞吐量只有 113,是因为机器本身的原因(性能差)。mysql官网压测的tpc业务吞吐量能够达到n万每秒,所以不要参考我这里的值。

        

检查完整体性能后再来看看响应时间的走势

如上图,insert 业务整体的响应时间走势相对平稳,这是符合预期的。而 select 业务的响应时间持续增长,这显然不符合预期。这种情况下需要考虑2点:

  1. 硬件瓶颈:根据硬件瓶颈情况优化
  2. 业务问题:设计不合理

我这里是属于第2种情况,业务设计不合理。select 业务为:

SELECT * FROM t1;

由于使用 * 输出全部结果,随着 inser 业务持续运行会导致表数据越来越大,所以查询返回的行数越来越多,消耗内存也就越来越多,响应时间也就持续增长。

我这里只是为了举个例子,与真实业务差距很大,所以"业务"并不具备参考性。

        

吞吐量走势图如下:

吞吐量的走势与响应时间是相对的,每个业务耗时越长,那么每秒能够完成的事务就会更少,所以吞吐量就会持续下跌。

        

3. 业务并发分配

jmeter 的线程数是由线程组设定的,所以我们通过创建多个线程组来分配不同业务的并发数。例如:读写业务占比 7:3

我笔记本性能差,总共10个线程,所以直接给读业务7、写业务3。

        

需要注意:监听器报告要与线程组平级,如果只放在某个线程组下面则只会统计这1个线程组的信息

        

来看一下压测后的结果

【线程分布】读写 7:3

【吞吐量】读业务高于写业务

【聚合报告】读业务高于写业务

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

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

相关文章

excel导入标准化

excel导入较导出还是复杂一些,一般分为三个步骤.市面上低代码平台可以将常用的操作固化,并且形成收益,这也是挺好的。我将我的一些总结分享到网上也是我自己乐意的。毕竟尊重技术的还是搞技术的自身,一般企业老板并不太关心技术代…

Spring中@import注解终极揭秘!

技术概念 它能干啥 Import注解在Spring框架中主要用于解决模块化和配置管理方面的技术问题,它可以帮助开发者实现以下几个目标: 模块化配置:在大型项目中,通常需要将配置信息分散到多个配置类中,以便更好地组织和管…

FPGA-DDS原理及实现

DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点。较容易实现频率、相位以及幅度的数控调制,广泛应用于通信领域。 相位累加器是由N位加法器与N位寄存器构成,每个时钟周期的上升沿,加法器…

【Qt】Qwidget的常见属性

目录 一、Qwidget核心属性 二、enable属性 三、geometry属性 四、 WindowFrame的影响 五、windowTitle属性 六、windowIcon属性 七、qrc文件管理资源 八、windowOpacity属性 九、cursor属性 十、font属性 十一、toolTip属性 十二、focusPolicy属性 十三、styleShe…

STM32FreeRTOS-事件组1(STM32Cube高效开发教程)

文章目录 一、事件组的原理和功能1、事件组与队列信号量特点2、事件组存储结构3、事件组运行原理 二、事件组部分函数1、xEventGroupCreate()创建事件组函数2、xEventGroupSetBits()事件组置位函数3、xEventGroupSetBitsFromISR()…

SQL技巧笔记(一):连续3人的连号问题—— LeetCode601.体育馆的人流量

SQL 技巧笔记 前言:我发现大数据招聘岗位上的应聘流程都是需要先进行笔试,其中占比很大的部分是SQL题目,经过一段时间的学习之后,今天开了一个力扣年会员,我觉得我很有必要去多练习笔试题目,这些题目是有技…

Linux - 进程概念

1、冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系; 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成: 输入单元:…

【JavaEE】_Spring MVC项目使用数组与集合传参

目录 1. 使用数组传参 1.2 传递单个参数 1.3 传递多个名称相同的参数 1.3.1 关于urlencode 2. 使用集合传参 1. 使用数组传参 创建一个Spring MVC项目,其中 .java文件内容如下: package com.example.demo.controller;import com.example.demo.Per…

自我对比: 通过不一致的解决视角更好地进行反思

一、写作动机: LLM 在自我评价时往往过于自信或随意性较大,提供的反馈固执或不一致,从而导致反思效果不佳。为了解决这个问题,作者提倡 "自我对比": 它可以根据要求探索不同的解决角度,对比差异…

周边类-找厕所小程序源码

源码获取方式 1,搜一搜 万能工具箱合集 点击资料库 即可进去获取 找厕所小程序源码依赖于腾讯地图的一款源码,腾讯地图api免费申请,是一款免费又永久的不需要服务器的小程序,起个好名字蹭蹭蹭~ 搭建教程: 1、下载源码…

使用css的transition属性实现抽屉功能

需求 使用css手写一个抽屉&#xff0c;并且不能遮挡住原来的页面 效果&#xff1a;&#xff08;录的gif有点卡&#xff0c;实际情况很丝滑&#xff09; 实现代码&#xff1a; <template><div class"dashboard-container"><div class"mainBox&…

Java项目:36 springboot图书个性化推荐系统的设计与实现003

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员&#xff1a;首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退…

[element]element-ui框架下载

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一键三连&#x1f609;有写的不好的地方也欢迎指正&#xff0c;一同进步&#x1f601;…

基于Springboot的足球俱乐部管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的足球俱乐部管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍: 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff…

【Datawhale组队学习:Sora原理与技术实战】Attention和LLM

Attention Attention 注意力&#xff0c;从两个不同的主体开始。 论文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓&#xff1a;https://github.com/google/seq2seq 计算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

数据库-ODBC操作

承接Qt/C软件开发项目&#xff0c;高质量交付&#xff0c;灵活沟通&#xff0c;长期维护支持。需求所寻&#xff0c;技术正适&#xff0c;共创完美&#xff0c;欢迎私信联系&#xff01; 一、ODBC 数据源配置 打开ODBC数据源管理器&#xff1a; 在Windows搜索栏中键入“ODBC数…

PyTorch搭建LeNet神经网络

函数的参数 1、PyTorch Tensor的通道排序 [batch, channel, height, width] batch: 要处理的一批图像的个数 channel: 通道数&#xff08;一般是R G B 三个通道&#xff09; height: 图像的高度 width: 图像的宽度 2.Conv 2d 卷积层的参数 [in_channels, out_channels, ke…

Golang 开发实战day01 - Variable String Numeric

Golang 教程01 - Variable String Numeric 1. Go语言的重要性 Go语言&#xff0c;又称Golang&#xff0c;是一种由Google开发的静态编译型编程语言。它于2009年首次发布&#xff0c;并在短短几年内迅速流行起来。Go语言具有以下特点&#xff1a; 语法简单易学&#xff1a;Go…

第一节 JDBC是什么?

JDBC代表Java数据库连接(Java Database Connectivity)&#xff0c;它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API&#xff0c;换句话说&#xff1a;JDBC是用于在Java语言编程中与数据库连接的API。 JDBC库包括通常与数据库使用相关&#xff0c;如下面提到的…

链表哨兵例子

哨兵链表例子_根据值删除链表 package linklist;public class leetcode203 {public static void main(String[] args) {ListNode listNode new ListNode(1,new ListNode(2,new ListNode(3)));ListNode listNode1 removeElements(listNode,2);System.out.println(listNode1);…