使用JMeter玩转tidb压测

作者: du拉松 原文来源: https://tidb.net/blog/3f1ada39

一、前言

tidb是mysql协议的,所以在使用过程中使用tidb的相关工具连接即可。因为jmeter是java开发的相关工具,直接使用mysql的jdbc驱动包即可。

二、linux下安装jmeter

jmeter需要jdk环境,且安装jmeter需要java8以上环境。

(一)、安装jdk

下载地址: https://www.oracle.com/technetwork/java/javase/downloads/index.html

这里我下载的jdk17

解压压缩包到/usr/local/java/下:

配置jmeter环境变量:编辑/etc/profile文件 vi /etc/profile

在文件上部加上如下配置:

# 这里的JAVA_HOME填写linux系统的路径 
export JAVA_HOME=/usr/local/java/jdk17.0.12 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
export PATH=$PATH:$JAVA_HOME/bin

生效环境变量配置:

source /etc/profile

验证java是否已经安装成功: java -version,出现版本号即安装成功

0

(二)、linux下安装jmeter

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

在/usr/local目录下创建jmeter文件夹

配置jmeter环境变量:在/etc/profile文件上部添加配置信息:

export JMETER_HOME=/usr/local/jmeter/apache-jmeter-5.6.3 
export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH 
export PATH=$JMETER_HOME/bin:$PATH

生效jmeter环境变量:source /etc/profile

验证jmeter是否安装成功:jmeter --version

0

三、前置准备

如果使用linux环境执行jmeter压测。可以先在windows下使用可视化页面编辑jmx配置文件后,上传到linux使用命令压测。

(一)、配置jdbc

准备压测tidb数据库,所以需要先下载jdbc驱动包。

tidb jdbc驱动包下载地址: https://downloads.tidb.com/archives/c-j/

选择要下载的版本,Operating system选择platform independent,选择zip格式的包下载。

image.png

下载后解压压缩包,把下面tidb-connerctor-j-8.0.33.jar放到jmeter目录下的lib下:

image.png

(二)、在windows下打开jmeter

下载jmeter后,解压压缩包。进入jmeter文件夹下的bin目录下:

image.png

双击jmeter.bat后会打开可视化页面。

image.png

(三)、jmeter汉化

  1. 短暂的可视化页面汉化。点击options --> choose language --> chinese(Simplified)

这种方式设置后,下次再打开还是会还原成英文。

image.png

  1. 永久的可视化页面汉化,在jmeter的bin目录下,找到jmeter.properties文件,打开后找到language,放开注释,维护类型为zh_CN

image.png

四、jmeter压测脚本编辑

(一)、执行一个查询

场景:

连接tidb数据库127.0.0.1 端口3306,账户:root,密码:3306

开启一个线程执行select * from test where id = '?' 该sql,参数动态从csv中获取,持续运行30s。

  1. 创建一个线程组

image.png

  1. 配置线程组如下

image.png

  1. 创建jdbc配置信息

右击线程组“查询”,添加-->配置元件-->JDBC Connection Configuration

image.png

  1. 编辑jdbc的配置文件:

配置名称为local_tidb

tidb的database_url为:jdbc: mysql://127.0.0.1:3306/test

tidb的driver class为:com.tidb.cj.jdbc.Driver

user为root

密码为123456

image.png

  1. 添加jdbc request,右击线程组“查询”,添加-->取样器-->jdbc request

image.png

  1. 修改jdbc request配置信息

image.png

  1. 添加csv配置,右击线程组“查询”,添加 --> 配置元件 --> CSV Data Set Config

image.png

  1. 配置csv信息

创建一个csv文件,首行为列名“id”

image.png

image.png

  1. 添加查看结果树,(这里本地测试的时候添加即可,正式压测时可以删除)。右击线程组“查询”,添加 --> 监听器 --> 查看结构树

image.png

  1. 添加汇总报告,右击线程组“查询”,添加 --> 监听器 --> 汇总报告。

image.png

  1. 最终的配置结构如下:

image.png

  1. 执行压测,点击如下绿色按钮。

image.png

  1. 执行后查看结构树

这里可以看到每次请求的执行结果,列表中绿色图标表示成功,红色图标表示失败。

右侧的取样器:展示具体的请求和响应延时等

请求:展示执行的sql和参数。

响应数据:查看查询出的数据。

image.png

  1. 查看汇总报告

image.png

(二)、执行多个查询

场景:

连接tidb数据库127.0.0.1 端口3306,账户:root,密码:3306

开启一个线程执行sql1:select * from test where id = '?' 和sql2:select * from test where name = '?',参数动态从csv中获取,持续运行30s。

注意:步骤和一个查询的相同,下面只列出不同的配置。

  1. jdbc 配置中增加?allowMultiQueries=true

0

  1. jdbc request配置

0

  1. csv配置信息

0

(三)、多个线程组执行不同类型sql

场景:

连接tidb数据库127.0.0.1 端口3306,账户:root,密码:3306

开启1个线程执行sql1:select * from test where id = '?'

开启2个线程执行sql2:update test set create_time = now() where name = '?',

参数动态从csv中获取,两组线程都持续运行30s。

  1. 总体的配置如下

在测试计划下维护jdbc配置信息,提供给线程组1和线程组2共同使用。

这里我想看一个总体结果,所以汇总报告和结构树放在测试计划下面,而不是每个线程组下。如果想查看每个线程组的汇总报告,可以在每个线程组下放汇总报告和结果树。

0

  1. 线程组1开启了1个线程,持续30s。

0

  1. 线程组2开启了2个线程,持续30s。

0

五、linux下使用上述配置进行压测

  1. 在上述的可视化界面中编辑完配置,ctrl + s 保存配置到本地,比我我保存的为 yc.jmx
  2. 记得上传jdbc驱动jar到linux环境下的jmeter中lib下。
  3. 把yc.jmx和csv上传到装有jmeter的linux上。
  4. 如果想修改个别参数,可以直接编辑yc.jmx文件即可。如下修改数据库连接为172.16.0.13

0

  1. 修改查询线程组的线程数为5

0

  1. 修改csv的路径为当前目录(即和jmx文件相同目录)

0

  1. 执行如下命令进行压测:

#jmeter -n -t test-file [-p property-file] [-l results-file] [-j log-file] # -n -t 后指定配置文件jmx,-l 是导出压测结果到文件jtl,-j是输出log文件。 jmeter -n -t ./yc.jmx -l ../test/yc.jtl

  1. 把yc.jtl文件导入到windows可视化工具查看结果,查看汇总报告:

打开汇总报告,选择文件yc.jtl, 可以加载如下的压测数据信息

0

六、总结

JMeter是个开源的工具,支持各种的压测场景,不管是对tidb还是对其他数据库都存在高度的支持。还可以根据自己的业务场景定制化不同的脚本来执行压测操作。

以上是本人使用过程中的场景总结,希望给大家提供帮助。

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

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

相关文章

Launcher3主页面加载显示流程分析

布局结构 抓取布局后,可以看到每个图标是一个DoubleShadowBubbleTextView,父布局是CellLayout、workspace。 我们可以在CellLayout添加子view打印出调用堆栈信息,可以整体上看页面加载显示流程。 主要类 Launcher.java:主界面&…

开发培训:慧集通(DataLinkX)iPaaS集成平台-基于接口的连接器开发(不需要认证机制)

一、开发一个简单的应用0源,本实例中对接的应用不需要接口认证 1、【连接管理-自建】新建应用源,保存并发布 代码示例 return {$$ - >//日志打印$$.$Log.info(日志打印) } 二、使用应用,建立应用连接 1、实例创建,【连接管理…

pikachu靶场--目录遍历和敏感信息泄露

pikachu靶场—目录遍历和敏感信息泄露 目录遍历 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再…

机器学习详解(13):CNN图像数据增强(解决过拟合问题)

在之前的文章卷积神经网络CNN之手语识别代码详解中,我们发现最后的训练和验证损失的曲线的波动非常大,而且验证集的准确率仍然落后于训练集的准确率,这表明模型出现了过拟合现象:在验证数据集测试时,模型对未见过的数据…

Word2Vec解读

Word2Vec: 一种词向量的训练方法 简单地讲,Word2Vec是建模了一个单词预测的任务,通过这个任务来学习词向量。假设有这样一句话Pineapples are spiked and yellow,现在假设spiked这个单词被删掉了,现在要预测这个位置原本的单词是…

#渗透测试#漏洞挖掘#WAF分类及绕过思路

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…

电子应用设计方案85:智能 AI门前柜系统设计

智能 AI 门前柜系统设计 一、引言 智能 AI 门前柜系统旨在提供便捷、安全和智能的物品存储与管理解决方案,适用于家庭、公寓或办公场所的入口区域。 二、系统概述 1. 系统目标 - 实现无接触式物品存取,减少交叉感染风险。 - 具备智能识别和分类功能&am…

如何在不丢失数据的情况下从 IOS 14 回滚到 IOS 13

您是否后悔在 iPhone、iPad 或 iPod touch 上安装 iOS 14?如果你这样做,你并不孤单。许多升级到 iOS 14 beta 的 iPhone、iPad 和 iPod touch 用户不再适应它。 如果您在正式发布日期之前升级到 iOS 14 以享受其功能,但您不再适应 iOS 14&am…

线性代数考研笔记

行列式 背景 分子行列式:求哪个未知数,就把b1,b2放在对应的位置 分母行列式:系数对应写即可 全排列与逆序数 1 3 2:逆序数为1 奇排列 1 2 3:逆序数为0 偶排列 将 1 3 2 只需将3 2交换1次就可以还原原…

设计心得——流程图和数据流图绘制

一、流程图和数据流图 在软件开发中,画流程图和数据流图可以说是几乎每个人都会遇到。 1、数据流(程)图 Data Flow Diagram,DFG。它可以称为数据流图或数据流程图。其主要用来描述系统中数据流程的一种图形工具,可以将…

SpringBoot框架开发中常用的注解

文章目录 接收HTTP请求。RestController全局异常处理器Component依赖注入LombokDataBuildersneakyThrowsRequiredArgsConstructor 读取yml文件配置类注解 接收HTTP请求。 RequestMapping 接收HTTP请求。具体一点是 GetMapping PostMapping PutMapping DeleteMapping 一共…

ELK日志平台搭建 (最新版)

一、安装 JDK 1. 下载 JDK 21 RPM 包 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm2. 安装 JDK 21,使用 rpm 命令安装下载的 RPM 包: sudo rpm -ivh jdk-21_linux-x64_bin.rpm3. 配置环境变量 编辑 /etc/profile 文件以配置 JAVA_HO…

使用 Jupyter Notebook:安装与应用指南

文章目录 安装 Jupyter Notebook1. 准备环境2. 安装 Jupyter Notebook3. 启动 Jupyter Notebook4. 选择安装方式(可选) 二、Jupyter Notebook 的基本功能1. 单元格的类型与运行2. 可视化支持3. 内置魔法命令 三、Jupyter Notebook 的实际应用场景1. 数据…

AcWing-164.可达性统计(拓扑排序 + 位运算)

原题链接:164. 可达性统计 - AcWing题库 题目描述: 题目 输入格式 输出格式 数据范围 输入样例: 输出样例: 思路 AC代码: 题目描述: 题目 给定一张 𝑁 个点 𝑀 条边的有向无…

Windows安装了pnpm后无法在Vscode中使用

Windows安装了pnpm后无法在Vscode中使用 解决方法: 以管理员身份打开 PowerShell 并执行以下命令后输入Y回车即可。 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser之后就可以正常使用了

python学opencv|读取图像(二十五)使用cv2.putText()绘制文字进阶-垂直镜像文字

【1】引言 前序学习进程找那个,已经掌握了使用pythonopencv绘制常规文字和倾斜文字的基本技巧。相关链接如下: python学opencv|读取图像(二十三)使用cv2.putText()绘制文字-CSDN博客 python学opencv|读取图像(二十四…

6.充放电相关实验(过压、欠压、过流、短路、过温、低温)演示

1.充放电演示 (1)一定要按照操作步骤来,先将电池板上的充放电开关一定要处于断开状态(字母O一边按下是断开,字母I一边按下是接通),然后夹上充电器的电源夹子到BMS控制板的PACK-、PACK+两端,然后给充电器插上电源(如果使用自己的充电器一定要注意不要大于21V),然后拨动…

解决HBuilderX报错:未安装内置终端插件,是否下载?或使用外部命令行打开。

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 错误描述 在HBuilderX中执行npm run build总是提醒下载插件;图示如下: 但是,下载总是失败。运行项目时候依然弹出上述提醒。 解决方案 …

【小程序开发】- 小程序版本迭代指南(版本发布教程)

一,版本号 版本号是小程序版本的标识,通常由一系列数字组成,如 1.0.0、1.1.0 等。版本号的格式通常是 主版本号.次版本号.修订号 主版本号:当小程序有重大更新或不兼容的更改时,主版本号会增加。 次版本号&#xff1a…

基于微信小程序投票评选系统的设计与实现ssm+论文源码调试讲解

第4章 系统设计 4.1 系统设计的原则 在系统设计过程中,也需要遵循相应的设计原则,这些设计原则可以帮助设计者在短时间内设计出符合设计规范的设计方案。设计原则主要有可靠性,安全性,可定制化,可扩展性,可…