写点什么

使用 JMeter 玩转 tidb 压测

  • 2025-01-10
    北京
  • 本文字数:2553 字

    阅读完需:约 8 分钟

作者: 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, 出现版本号即安装成功


(二)、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


三、前置准备

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

(一)、配置 jdbc

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


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


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



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


(二)、在 windows 下打开 jmeter

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



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


(三)、jmeter 汉化

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


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



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


四、jmeter 压测脚本编辑

(一)、执行一个查询

场景:


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


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


  1. 创建一个线程组



  1. 配置线程组如下



  1. 创建 jdbc 配置信息


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



  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



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



  1. 修改 jdbc request 配置信息



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



  1. 配置 csv 信息


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




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



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



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



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



  1. 执行后查看结构树


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


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


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


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



  1. 查看汇总报告


(二)、执行多个查询

场景:


连接 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



  1. jdbc request 配置



  1. csv 配置信息


(三)、多个线程组执行不同类型 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 共同使用。


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



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



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


五、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



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



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



  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, 可以加载如下的压测数据信息


六、总结

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


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


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
使用JMeter玩转tidb压测_性能测评_TiDB 社区干货传送门_InfoQ写作社区