前言
Hybench是一款由中国软件评测中心、清华大学联合牵头,北京奥星贝斯科技有限公司、武汉达梦数据库股份有限公司、华为技术有限公司、腾讯云计算有限公司、阿里云计算有限公司共同研发的HTAP数据库基准测试工具。
Hybench针对HTAP数据库技术特点,参考实际典型应用场景进行设计,数据模型采用在线金融交易分析场景,提供OLTP、OLAP、OLXP三类典型HTAP负载,支持不同规模的数据集,可以计算出TPS、QPS、XPS、新鲜度等不同维度的评价指标,最终给出统一评价指标H-Score。为数据库厂商和第三方评测机构提供HTAP数据库基准性能的评价方法及工具,引导HTAP数据库的技术研究方向,帮助用户进行HTAP数据库选型。
第一步,准备执行环境
工具使用Java编写的,需要jre(或者jdk)17以上的版本。
如果没有,安装一下。对了,由于Oracle目前严查jdk的许可,可以的话,建议使用openjdk.
对于arm环境, openjdk 17可能没法通过 yum install安装, 而是需要到官网上下载,并安装
https://jdk.java.net/archive/
第二步,准备数据库
以MogDB为例,创建用户并创建一个独立的database 。
create user hybench password 'HyBench@123';
create database hybench owner hybench ;
第三步,下载HyBench
目前,HyBench工具的源码及编译好版本放在gitee上,具体地址是
https://gitee.com/cstc2023/hybench
可以下载zip包 ,然后解压。
或者通过git命令行下载
git clone https://gitee.com/cstc2023/hybench.git
当然,如果你未注册gitee账号,需要先注册一个。
第四步,准备配置文件
示例配置文件在HyBench主目录下的 conf/db.prop
可以直接修改或者拷贝一份进行修改。
里面主要需要配置的项包括:
首先是数据库类型,目前可选为mysql、postgreSQL和oracle
- db=postgreSQL
然后是连接数据库的JDBC几个属性:
- classname=org.opengauss.Driver #JDBC的驱动类名称
- username=hybench #JDBC连接用户
- password=HyBench@123 #JDBC连接的密码
- url=jdbc:opengauss://127.0.0.1:15070/hybench?loggerLevel=off # JDBC Url
还有4个类似的,专门用于OLAP库的JDBC几个属性:
- url_ap=jdbc:opengauss://127.0.0.1:15070/hybench?loggerLevel=off
- classname_ap=org.opengauss.Driver
- username_ap=hybench
- password_ap=HyBench@123
再然后是数据规模,目前只能选择1倍或者10倍
- sf=1x
由于是HTAP测试工具, 因此,工具设计了3种测试压力,分别是OLTP、OLAP和HTAP,需要单独配置。
OLTP的运行时间和并发客户端数量
- tpRunMins=1
- tpclient=1
OLAP的运行时间和并发客户端数量
- apRunMins=1
- apclient=1
HTAP的运行时间和并发客户端数量
- xpRunMins=1
- xtpclient=1
- xapclient=1
还有些参数,虽然配置了,但多数情况下不需要调整。
最终的prop类似这样
db=postgreSQL
classname=org.opengauss.Driver
url=jdbc:opengauss://127.0.0.1:15070/hybench?loggerLevel=off
username=hybench
password=HyBench@123
classname_ap=org.opengauss.Driver
url_ap=jdbc:opengauss://127.0.0.1:15070/hybench?loggerLevel=off
username_ap=hybench
password_ap=HyBench@123
sf=1x
tpRunMins=5
tpclient=5
apRunMins=10
apclient=10
xpRunMins=10
xtpclient=5
xapclient=10
fresh_interval=20
at1_percent=35
at2_percent=25
at3_percent=15
at4_percent=15
at5_percent=7
at6_percent=3
apround=1
由于内置的JDBC驱动包只有mysql/postgresql和Oracle, 如果JDBC需要使用其他驱动,还需要把JDBC驱动包拷贝到主目录lib下面。
第五步,配置可执行文件中的JAVA_HOME变量
vi hybench
...
export JAVA_HOME=/usr/lib/jvm/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
java -cp ./lib/*:. com.hybench.HyBench $*
并顺便授予可执行权限
chmod +x hybench
第六步,生成测试数据的csv格式文件
不同于常用的BenchmarkSQL工具,目前HyBench仅支持生成csv格式文件并把将数据文件导入到数据库的动作留给了测试厂商自己实现。
./hybench -t gendata -c conf/db.prop
等着生成所有文件
第七步,生成表结构
现成的表结构文件在 conf/ddl_<dbtype>.sql,当然,可以根据需要修改一些参数。
可以直接拿SQL在数据库自己的工具执行,或者使用hybench直接执行
./hybench -t sql -c conf/db.prop -f conf/ddl_og.sql
然后,会生成一些csv文件
ls -l Data_1x total 529392 -rw-r--r-- 1 root root 13973790 Aug 12 16:42 checkingAccount.csv -rw-r--r-- 1 root root 35606923 Aug 12 16:42 checking.csv -rw-r--r-- 1 root root 319432 Aug 12 16:42 company.csv -rw-r--r-- 1 root root 37418564 Aug 12 16:42 customer.csv -rw-r--r-- 1 root root 35452229 Aug 12 16:42 loanApps.csv -rw-r--r-- 1 root root 45935949 Aug 12 16:42 loanTrans.csv -rw-r--r-- 1 root root 13973790 Aug 12 16:42 savingAccount.csv -rw-r--r-- 1 root root 359402665 Aug 12 16:42 transfer.csv
注意,生成的csv文件是没有标题行的。
第七步,导入数据
以MogDB为例,用gsql copy命令进行导入
cd Data_1x
for fileName in *.csv ; do
tableName=`echo $fileName|cut -d . -f 1`
echo "Loading $fileName into table $tableName"
gsql -d hybench -Uhybench -Whybench@123 -c "\\copy $tableName from '$fileName' with(format 'csv',header off) parallel 8"
done
...
Loading checkingAccount.csv into table checkingAccount
Loading checking.csv into table checking
Loading company.csv into table company
Loading customer.csv into table customer
Loading loanApps.csv into table loanApps
Loading loanTrans.csv into table loanTrans
Loading savingAccount.csv into table savingAccount
Loading transfer.csv into table transfer
...
第八步,创建必要的索引,处理sequence等
./hybench -t sql -c conf/db.prop -f conf/ddl_og_afterload.sql
第九步,开始测试
为了避免结果丢失,可以测试时用Linux命令tee -a把结果保存一下
连续测试:
./hybench -t runall -c conf/db.prop -f conf/stmt_opengauss.toml | tee -a testResult.log
或者分步测试
./hybench -t runappower -c conf/db.prop -f conf/stmt_opengauss.toml | tee -a testResult.log
./hybench -t runtp -c conf/db.prop -f conf/stmt_opengauss.toml | tee -a testResult.log
./hybench -t runap -c conf/db.prop -f conf/stmt_opengauss.toml | tee -a testResult.log
./hybench -t runfresh -c conf/db.prop -f conf/stmt_opengauss.toml | tee -a testResult.log
./hybench -t runhtap -c conf/db.prop -f conf/stmt_opengauss.toml | tee -a testResult.log
结果解读
跑完之后,最主要的结果如下:
-----------HTAP-Summary--------------------
-----------AP-Part--------------------
QPS : 0.48
-----------TP-Part--------------------
TPS : 4.80
-----------XP-Part--------------------
XP-QPS : 0.50
XP-TPS : 0.72
-----------Avg-Freshness-Score--------------------
Freshness(ms) : 0.00
-----------HTAP-Score--------------------
Geometric Mean : 1.41
其中
- 纯AP关注的是QPS,每秒运行的查询数
- 纯TP关注的是TPS, 每秒完成的事务数
- HTAP由于是混合负载,因此,通过内部一些算法,最终算出的是几何平均数,Geometric Mean




