benchmarkSQL

BenchmarkSQL使用方法

以pingcap的分支作为演示:https://github.com/pingcap/benchmarksql

1、编译源码
# git clone https://github.com/pingcap/benchmarksql.git
# cd benchmarksql
# ant

2、运行
1)、创建数据库的用户
2)、创建数据库(以mysql系列为例)
此处数据库和jdbcurl中的数据库保持一致
3)、创建表
创建表可以指定自定义的创表sql脚本,也可以不指定使用默认方式,例如:
# ./runDatabaseBuild.sh prop.mysql.test sql.mysql/tableCreates.sql
或者
# ./runDatabaseBuild.sh prop.mysql.test
4)、导入数据
# ./runLoader.sh prop.mysql.test
5)、执行
./runBenchmark.sh prop.mysql.test

3、查看和生成html报告
./generateReport.sh my_result_2021-10-19_120555

运行相对来说比较简单,这里着重看一下参数的配置和jdbc驱动更换的方法

配置部分

// 数据库类型,目前支持这几种firebird|oracle|postgres|mysql,按需修改
db=postgres
// jdbc驱动类名,按需修改
driver=org.postgresql.Driver
// jdbcUrl,按需修改
conn=jdbc:postgresql://localhost:5432/postgres
// 数据库用户名
user=test1234
// 数据库密码
password=test1234
// 仓库数量
warehouses=1
//用于在数据库中初始化数据的加载进程数量,按需调整
loadWorkers=4
// 终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍
terminals=1
// 每个终端(terminal)运行的固定事务数量,例如:如果该值设置为10,意味着每个terminal运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必须设置为0
runTxnsPerTerminal=10
// 要测试的整体时间,单位为分钟,如果runMins设置为60,那么测试持续1小时候结束。该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设置为正整数,如果设置其中一个,另一个必须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。
runMins=0
// 每分钟事务总数限制,该参数主要控制每分钟处理的事务数,事务数受terminals参数的影响,如果terminals数量大于limitTxnsPerMin值,意味着并发数大于每分钟事务总数,该参数会失效,想想也是如此,如果有1000个并发同时发起,那每分钟事务数设置为300就没意义了,上来就是1000个并发,所以要让该参数有效,可以设置数量大于并发数,或者让其失效,测试过程中目前采用的是默认300。
// 测试过程中的整体逻辑通过一个例子来说明:假如limitTxnsPerMin参数使用默认300,termnals终端数量设置为150并发,实际会计算一个值A=limitTxnsPerMin/terminals=2(此处需要注意,A为int类型,如果terminals的值大于limitTxnsPerMin,得到的A值必然为0,为0时该参数失效),此处记住A=2;接下来,在整个测试运行过程中,软件会记录一个事务的开始时间和结束时间,假设为B=2000毫秒;然后用60000(毫秒,代表1分钟)除以A得到一个值C=60000/2=30000,假如事务运行时间B<C,那么该事务执行完后,sleep C-B秒再开启下一个事务;假如B>C,意味着事务超过了预期时间,那么马上进行下一个事务。在本例子中,每分钟300个事务,设置了150个并发,每分钟执行2个并发,每个并发执行2秒钟完成,每个并发sleep 28秒,这样可以保证一分钟有两个并发,反推回来整体并发数为300/分钟。
limitTxnsPerMin=300
// 终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。
terminalWarehouseFixed=true
// 下面五个值的总和必须等于100,默认值为:45, 43, 4, 4 & 4 ,与TPC-C测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4

// 测试数据生成目录,默认无需修改,默认生成在run目录下面,名字形如my_result_xxxx的文件夹。
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
// 操作系统性能收集脚本,默认无需修改,需要操作系统具备有python环境
osCollectorScript=./misc/os_collector_linux.py
// 操作系统收集操作间隔,默认为1秒
osCollectorInterval=1
// 操作系统收集所对应的主机,如果对本机数据库进行测试,该参数保持注销即可,如果要对远程服务器进行测试,请填写用户名和主机名。
//osCollectorSSHAddr=user@dbhost
//操作系统中被收集服务器的网卡名称和磁盘名称(注意格式前缀)
osCollectorDevices=net_eth0 blk_sda

自定义jdbc驱动部分

修改点1: funcs.sh:27,57
添加对应数据库的名称(配置文件db指定的内容)和jdbc驱动jar包的路径
修改点2:jTPCC.java:119
添加dbType的判断条目,如果新增数据库类型,在jTPCCConfig.java:16添加
修改jTPCCConnection.java:210的switch分支,新增添加的数据库类型

参考:
https://www.cnblogs.com/klb561/p/10513528.html

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据