首页 > 其他分享 >【TiDB 实战】使用 HyBench 测试 TiDB

【TiDB 实战】使用 HyBench 测试 TiDB

时间:2024-01-29 19:07:12浏览次数:34  
标签:实战 rt 01 16 HyBench 23 INFO 2024 TiDB

img01.png

本文将介绍如何使用 HyBench 对 TiDB 进行测试,并简述 HyBench 适配 TiDB 的注意事项。

Hybench 是一款由中国软件评测中心、清华大学联合牵头,多家公司共同研发的 HTAP 数据库基准测试工具。

TiDB 是一款兼容 MySQL 的数据库,Hybench 已在 Gitee 开源,支持 MySQL 数据库,通过修改 HyBench 源码以适配 TiDB。

前置需求

  1. 为方便演示,这里直接启动一个 TiDB 本地测试集群。
[root@rocky9 ~]# tiup playground display
tiup is checking updates for component playground ...
Starting component `playground`: /root/.tiup/components/playground/v1.14.1/tiup-playground display
Pid   Role     Uptime
---   ----     ------
7146  pd       4h4m9.520051218s
7164  tikv     4h3m23.583874294s
7320  tidb     4h3m10.59454483s
7332  tiflash  4h1m54.080597745s
  1. 准备 JDK 17,并配置环境变量。
[root@rocky9 ~]# java -version
openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.9.0.9-1) (build 17.0.9+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.9.0.9-1) (build 17.0.9+9-LTS, mixed mode, sharing)
[root@rocky9 ~]# env | grep -i java
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.9.0.9-2.el9.x86_64
PATH=/root/.tiup/bin:/usr/lib/jvm/java-17-openjdk-17.0.9.0.9-2.el9.x86_64/bin:...
  1. 安装 Maven。

直接使用 dnf 安装即可,版本信息如下。

[root@rocky9 ~]# mvn --version
Apache Maven 3.6.3 (Red Hat 3.6.3-15)
Maven home: /usr/share/maven
Java version: 17.0.9, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-17-openjdk-17.0.9.0.9-2.el9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.14.0-362.13.1.el9_3.x86_64", arch: "amd64", family: "unix"

02.png

<!-- dnf install java-17-openjdk java-17-openjdk-devel dnf install maven

vi ~/.bashrc export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.9.0.9-2.el9.x86_64 export PATH=$JAVA_HOME/bin:$PATH -->

运行测试

1. 修改数据库连接信息。

依据实际需求修改配置文件 conf/db.prop 中的 HOST, IP, USERNAME, PASSWORD 等信息。

2. 生成测试数据。

运行生成数据的命令:

./hybench -t gendata -c conf/db.prop

输出结果:

[root@rocky9 hybench]# ./hybench -t gendata -c conf/db.prop
2024-01-16 23:07:30 [main] INFO  HyBench:324 - Hi~Bench, HyBench
2024-01-16 23:07:30 [main] INFO  ConfigLoader:57 - ===============configuration==================
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - xapclient = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - at2_percent = 25
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - at1_percent = 35
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - apclient = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - xpRunMins = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - at4_percent = 15
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - apround = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - url = jdbc:mysql://192.168.8.92:4000/hybench?useUnicode=true&characterEncoding=utf-8
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - tpRunMins = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - at3_percent = 15
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - password = 
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - tpclient = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - fresh_interval = 20
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - sf = 1x
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - classname = com.mysql.cj.jdbc.Driver
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - xtpclient = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - apRunMins = 1
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - at5_percent = 7
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - db = tidb
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - username = root
2024-01-16 23:07:30 [main] INFO  ConfigLoader:59 - at6_percent = 3
2024-01-16 23:07:30 [main] INFO  ConfigLoader:61 - ===============configuration==================
2024-01-16 23:07:30 [main] INFO  ConfigLoader:62 - 
This is a data generator of HyBench, Version 0.1
----------------
----------------
----------------
Data is generating...
----------------
----------------
----------------
WARNING: dir:/root/hybench/Data_1x not exists! will created.
Data generate not skipped!
Data is ready under the Data folder!
----------------
----------------
----------------
Data generation took 11831 ms
No autoloader, do nothing!

查看生成的数据文件:

[root@rocky9 Data_1x]# ll -h
total 11M
-rw-r--r-- 1 root root 1.4M Jan 16 23:07 checkingAccount.csv
-rw-r--r-- 1 root root 315K Jan 16 23:07 checking.csv
-rw-r--r-- 1 root root 305K Jan 16 23:07 company.csv
-rw-r--r-- 1 root root 3.6M Jan 16 23:07 customer.csv
-rw-r--r-- 1 root root 320K Jan 16 23:07 loanApps.csv
-rw-r--r-- 1 root root 411K Jan 16 23:07 loanTrans.csv
-rw-r--r-- 1 root root 1.4M Jan 16 23:07 savingAccount.csv
-rw-r--r-- 1 root root 3.2M Jan 16 23:07 transfer.csv
[root@rocky9 Data_1x]# 

03.png

3. 初始化表结构。

运行生成表结构的命令:

./hybench -t sql -f conf/tidb/ddl_tidb.sql -c conf/db.prop

输出结果:

[root@rocky9 hybench]# ./hybench -t sql -f conf/tidb/ddl_tidb.sql -c conf/db.prop
2024-01-16 23:11:10 [main] INFO  HyBench:324 - Hi~Bench, HyBench
...
2024-01-16 23:11:10 [main] INFO  ConfigLoader:61 - ===============configuration==================
2024-01-16 23:11:10 [main] INFO  ConfigLoader:62 - 
2024-01-16 23:11:11 [main] INFO  ExecSQL:58 - execute query:CREATE TABLE IF NOT EXISTS  customer (
...

4. 初始化表索引。

运行生成表索引的命令:

./hybench -t sql -f conf/tidb/create_index_tidb.sql -c conf/db.prop

输出结果:

[root@rocky9 hybench]# ./hybench -t sql -f conf/tidb/create_index_tidb.sql -c conf/db.prop
2024-01-16 23:11:56 [main] INFO  HyBench:324 - Hi~Bench, HyBench
...
2024-01-16 23:11:56 [main] INFO  ConfigLoader:61 - ===============configuration==================
2024-01-16 23:11:56 [main] INFO  ConfigLoader:62 - 
2024-01-16 23:11:58 [main] INFO  ExecSQL:58 - execute query:create index idx_loanapps_1 on loanapps ( applicantid );
...

5. 导入测试数据。

运行导入数据的命令:

./hybench -t sql -f conf/tidb/load_data_tidb.sql -c conf/db.prop

输出结果:

[root@rocky9 hybench]# ./hybench -t sql -f conf/tidb/load_data_tidb.sql -c conf/db.prop
2024-01-16 23:30:20 [main] INFO  HyBench:324 - Hi~Bench, HyBench
...
2024-01-16 23:30:20 [main] INFO  ConfigLoader:61 - ===============configuration==================
2024-01-16 23:30:20 [main] INFO  ConfigLoader:62 - 
2024-01-16 23:30:22 [main] INFO  ExecSQL:58 - execute query:LOAD DATA LOCAL INFILE 'Data_1x/customer.csv' INTO TABLE customer FIELDS TERMINATED BY ',';
...

6. 连接数据库,查看库表信息。

mysql --comments --host 192.168.8.92 --port 4000 -u root
use hybench
show tables;

共导入 8 张表。

+-------------------+
| Tables_in_hybench |
+-------------------+
| checking          |
| checkingAccount   |
| company           |
| customer          |
| loanapps          |
| loantrans         |
| savingAccount     |
| transfer          |
+-------------------+
8 rows in set (0.01 sec)

7. 运行 TP 负载测试。

运行负载测试:

./hybench -t runtp -c conf/db.prop -f conf/tidb/stmt_tidb.toml

输出结果:

[root@rocky9 hybench]# ./hybench -t runtp -c conf/db.prop -f conf/tidb/stmt_tidb.toml
2024-01-16 23:38:57 [main] INFO  HyBench:324 - Hi~Bench, HyBench
2024-01-16 23:38:57 [main] INFO  ConfigLoader:57 - ===============configuration==================
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - xapclient = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - at2_percent = 25
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - at1_percent = 35
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - apclient = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - xpRunMins = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - at4_percent = 15
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - apround = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - url = jdbc:mysql://192.168.8.92:4000/hybench?useUnicode=true&characterEncoding=utf-8&allowLoadLocalInfile=true
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - tpRunMins = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - at3_percent = 15
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - password = 
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - tpclient = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - fresh_interval = 20
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - sf = 1x
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - classname = com.mysql.cj.jdbc.Driver
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - xtpclient = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - apRunMins = 1
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - at5_percent = 7
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - db = tidb
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - username = root
2024-01-16 23:38:57 [main] INFO  ConfigLoader:59 - at6_percent = 3
2024-01-16 23:38:57 [main] INFO  ConfigLoader:61 - ===============configuration==================
2024-01-16 23:38:57 [main] INFO  ConfigLoader:62 - 
2024-01-16 23:38:58 [main] INFO  HyBench:61 - Begin TP Workload
2024-01-16 23:38:58 [pool-3-thread-1] INFO  Client:263 - Begin to run :TPClient, Test Duration is 1 mins
2024-01-16 23:39:04 [Thread-0] INFO  Client:297 - Transaction 3 : max rt : 38.0 | min rt :23.0 | avg rt : 28.33 | 95% rt : 38.00 | 99% rt : 38.00
...
2024-01-16 23:39:04 [Thread-0] INFO  Client:307 - Current 1/10 time TP TPS is 6.50
...
2024-01-16 23:39:58 [Thread-0] INFO  Client:307 - Current 10/10 time TP TPS is 10.88
2024-01-16 23:39:58 [pool-3-thread-1] INFO  Client:397 - Finished to execute TPClient
2024-01-16 23:39:58 [main] INFO  HyBench:105 - TP Workload is done.
2024-01-16 23:39:58 [main] INFO  HyBench:407 - Congs~ Test is done! Bye!
====================Test Summary========================
Test starts at 2024-01-16 23:38:58
Test ends at 2024-01-16 23:39:58
AP Concurrency is 0
TP Concurrency is 1
Total amount of TP Transaction is 654
TPS is 10.9
Query/Transaction response time(ms) histogram : 
------------TP-------------------
TP Transaction  1 : max rt :      30.00 | min rt :      15.00 | avg rt :      21.28 | 95% rt :      30.00 | 99% rt :      30.00 
TP Transaction  2 : max rt :      59.00 | min rt :      16.00 | avg rt :      27.83 | 95% rt :      59.00 | 99% rt :      59.00 
TP Transaction  3 : max rt :      43.00 | min rt :      17.00 | avg rt :      24.08 | 95% rt :      41.25 | 99% rt :      43.00 
TP Transaction  4 : max rt :      47.00 | min rt :      14.00 | avg rt :      24.52 | 95% rt :      41.40 | 99% rt :      47.00 
TP Transaction  5 : max rt :      76.00 | min rt :      23.00 | avg rt :      37.18 | 95% rt :      72.55 | 99% rt :      76.00 
TP Transaction  6 : max rt :      55.00 | min rt :      18.00 | avg rt :      29.35 | 95% rt :      54.30 | 99% rt :      55.00 
TP Transaction  7 : max rt :      99.00 | min rt :      17.00 | avg rt :      32.33 | 95% rt :      99.00 | 99% rt :      99.00 
TP Transaction  8 : max rt :      47.00 | min rt :      14.00 | avg rt :      25.90 | 95% rt :      46.20 | 99% rt :      47.00 
TP Transaction  9 : max rt :     107.00 | min rt :      50.00 | avg rt :      70.00 | 95% rt :      99.75 | 99% rt :     107.00 
TP Transaction 10 : max rt :     683.00 | min rt :     214.00 | avg rt :     393.02 | 95% rt :     617.40 | 99% rt :     683.00 
TP Transaction 11 : max rt :     108.00 | min rt :      45.00 | avg rt :      66.57 | 95% rt :      93.00 | 99% rt :     108.00 
TP Transaction 12 : max rt :     111.00 | min rt :      41.00 | avg rt :      64.20 | 95% rt :      98.20 | 99% rt :     111.00 
TP Transaction 13 : max rt :     267.00 | min rt :      70.00 | avg rt :     122.98 | 95% rt :     219.45 | 99% rt :     267.00 
TP Transaction 14 : max rt :     256.00 | min rt :      70.00 | avg rt :     116.97 | 95% rt :     236.20 | 99% rt :     256.00 
TP Transaction 15 : max rt :     101.00 | min rt :      46.00 | avg rt :      67.52 | 95% rt :      99.40 | 99% rt :     101.00 
TP Transaction 16 : max rt :     209.00 | min rt :      65.00 | avg rt :     102.05 | 95% rt :     205.90 | 99% rt :     209.00 
TP Transaction 17 : max rt :     150.00 | min rt :      48.00 | avg rt :      71.58 | 95% rt :     116.50 | 99% rt :     150.00 
TP Transaction 18 : max rt :     124.00 | min rt :      46.00 | avg rt :      69.42 | 95% rt :     103.00 | 99% rt :     124.00 
====================Thank you!========================

8. 清理测试表数据。

运行清理脚本:

./hybench -t sql -f conf/dropTables.sql -c conf/db.prop

输出结果:

[root@rocky9 hybench]# ./hybench -t sql -f conf/dropTables.sql -c conf/db.prop
2024-01-16 23:43:07 [main] INFO  HyBench:324 - Hi~Bench, HyBench
...
2024-01-16 23:43:07 [main] INFO  ConfigLoader:61 - ===============configuration==================
2024-01-16 23:43:07 [main] INFO  ConfigLoader:62 - 
2024-01-16 23:43:09 [main] INFO  ExecSQL:58 - execute query:drop table if exists customer;
...

注意事项

  1. HyBench 需要使用 JDK 17,这在 README 中有一处提及,全文搜索一下比较容易找到。

封装了java执行命令(需要配置jdk17)

  1. 目前,开源版本只支持1X、10x数据,后续在商业版本中会增加100x,1000x及更大规模的数据。

对应文件 src/main/resource/parameters.toml 中可以看到 [1x][10x]

  1. 导入数据使用的 SQL 命令为 LOAD DATA LOCAL INFILE,是 db.prop 配置文件中,JDBC 连接串需要增加参数 allowLoadLocalInfile=true

总结

本文基于开源数据库压测软件 HyBench 对 TiDB 进行适配,并做简单测试。

项目地址:shawnyan/hybench

如果没有特殊需求,优先推荐使用 TiUP bench 组件对 TiDB 进行压测。

标签:实战,rt,01,16,HyBench,23,INFO,2024,TiDB
From: https://blog.51cto.com/shawnyan/9363661

相关文章

  • 软件测试学习笔记丨Charles_Mock实战
    Charles_Mock实战1.电脑端抓包抓取雪球Web端搜索接口数据查看接口响应状态码与使用的协议版本查看请求参数与json格式的响应内容快速过滤雪球域名的接口进行弱网测试,选择弱网模式为256kbpsProxy→ThrottleSetting,然后选择EnableThrottling弱网前弱网后2.App抓包抓取......
  • 通达信【金钻天启2210】幅图选股公式 全新思路的超短线操作实战模式指标,成熟实战的思
    原公式某地售价1500元哦,完全加密,股海网和谐源码文件分享本指标一个幅图信号公式,一个选股公式全新思路的超短线操作实战模式指标,本指标是一款以低吸判断最近洗盘结束后,捕捉强势龙头信号介入点提示,自动过滤近期市场弱势股与不活跃股;成熟实战的思路策略设计,快速提升选股能力;贴近......
  • 测试 TIDB in k8s 一次问题记录(pd failed to respond)
    作者:WalterWj问题背景单机装了个k8s,TIDB部署启动的时候看报错好像是tikv访问不到pd。但是通过tikvpodcurlpd端口是通的(404代表通,但是API不存在)。而且可以看到本地目录pd是预期产生文件了的。登录pdpod,执行pd-ctl也是正常执行。member命令下有内容解决方法......
  • 【COM3D2Mod制作教程】第七章:实战!制作衣服部分(下)
    【COM3D2Mod制作教程】第七章:实战!制作衣服部分(下)制作袜子Mod体会了裙子Mod的制作流程,不知道你有没有被麻烦的权重和形态键搞崩溃过,现在做袜子难道还得在来一遍?而且裆下的权重和形态键因为靠的太近做起来也很麻烦。不用害怕,袜子有一个裙子没有的特征:它够简单,没用复杂的装饰布线,......
  • logstash实现Mysql(Tidb)数据到Elasticsearch数据迁移(增量同步)
    1、下载Logstash和Elasticsearch,需要版本一致,本次使用版本均为7.8.0版本[root@zjkdata]#llelasticsearch-7.8.0-linux-x86_64.tar.gzlogstash-7.8.0.tar.gz-rw-r--r--.1rootroot31911256112月2815:39elasticsearch-7.8.0-linux-x86_64.tar.gz-rw-r--r--.1rootroo......
  • NGINX 实战操作(yarn-proxy)
    目录一、概述二、部署Hadoop环境三、部署yarn-proxyondocker1)部署docker2)部署docker-compose3)部署dnsmasq4)下载yarn-proxy5)修改配置6)开始部署7)通过subs_filter进行改进四、部署yarn-proxyonk8s一、概述NGINX代理是非常常见的,内网生成环境一般不让在本机直接访问,......
  • 【COM3D2Mod制作教程】第六章:实战!制作衣服部分(上)
    【COM3D2Mod制作教程】第六章:实战!制作衣服部分(上)教程介绍隔了N个月终于迎来了第二期的Mod教程部分,这一期我们将开始制作人物的衣服部分。因为体型适配的原因,衣服部分要比身体部分难得多,但主要也就是多了个刷权重和制作形态键的任务,只要掌握技巧,勤加练习,做起来也不会太难。由于......
  • YOLOv8实例分割实战:TensorRT加速部署
    课程链接:https://edu.51cto.com/course/35610.html课程简介:PyTorch版的YOLOv8支持高性能实时实例分割方法。TensorRT是针对英伟达GPU的加速工具。本课程讲述如何使用TensorRT对YOLOv8实例分割进行加速和部署,实测推理速度提高3倍以上。采用改进后的tensorrtx/yolov8的代码,使用Tens......
  • Prompt实战优化
    1.概述在深度学习领域,Prompt(提示语)被广泛应用于自然语言处理任务中,如文本生成、机器翻译和问答系统等。Prompt的设计对模型的性能和生成结果有着重要的影响,因此在实际应用中合理而有效地利用Prompt是提升模型表现的关键策略之一。本篇博客笔者将为大家介绍如何通过反复修改Prompt......
  • 【面试突击】计算级网络面试实战(上)
    欢迎关注公众号【11来了】,及时收到AI前沿项目工具及新技术的推送!在我后台回复「资料」可领取编程高频电子书!在我后台回复「面试」可领取硬核面试笔记!网络面试实战为什么要学习网络相关知识?对于好一些的公司,计算机基础的内容是肯定要面的,尤其是30k以内的工程师,因为目前处于的......