使用BenchMarkSQL对DM数据库进行性能测试。

编程入门 行业动态 更新时间:2024-10-20 08:00:49

使用BenchMarkSQL对DM数据库进行<a href=https://www.elefans.com/category/jswz/34/1767799.html style=性能测试。"/>

使用BenchMarkSQL对DM数据库进行性能测试。

使用BenchMarkSQL对DM数据库进行性能测试。官方下载。官方下载的包中暂时不支持DM数据库,可在此处下载修改后的测试包。

搭建测试环境

上传BenchMarkSQL测试包并解压。

创建测试用户/表空间

创建测试表空间。示例中为 bench

create tablespace bench datafile ‘/opt/dmdbms/data/DAMENG/bench01.dbf’ size 200;

创建测试用户。示例中名为 bench

create user bench identified by dameng123 default tablespace bench;
grant resource,dba to cndba;

确认驱动

将对应版本的数据库JDBC驱动复制到 benchmarksql-5.0/lib/dm中。

修改props.dm

完整的 props.dm示例。其中的具体参数见[[达梦数据库BenchMarkSql测试#props dm文件参数解释]]。

[root@localhost run]# cat props.dm
db=dm
driver=dm.jdbc.driver.DmDriver
conn=jdbc:dm://192.168.159.129:5236
user=bench
password=dameng@123
warehouses=3
loadWorkers=4
terminals=16
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=5
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=true
//The following five values must add up to 100
//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
//osCollectorSSHAddr=user@dbhost
osCollectorDevices=net_ens33 blk_sda
[root@localhost run]# 

初始化数据

初始化测试用数据。在benchmark/run目录下运行

 ./runDatabaseBuild.sh props.dm

压力测试

执行压力测试。在benchmark/run目录下运行

 ./runBenchmark.sh props.dm

在此过程中,如果配置文件中的参数过大,压测启动会提示错误,需修改后再次进行,修改方法在后文说明。
压力测试在文件中设定的时间后结束。

修改参数

在测试过程中,可能根据被测服务器情况多次调整 props.dm中的参数。每次参数调整后,都需要重新构建测试数据,命令如下

 ./runDatabaseDestroy.sh props.dm./runDatabaseBuild.sh props.dm

生成测试报告

压力测试完成后,会在 run目录下生成一个文件夹(命名方式在 props.dm文件中配置),内容如下

[root@localhost my_result_2020-11-13_150933]# pwd
/opt/benchmarksql-5.0/run/my_result_2020-11-13_150933
[root@localhost my_result_2020-11-13_150933]# 
[root@localhost my_result_2020-11-13_150933]# tree ./
./
├── data
│   ├── blk_sda.csv
│   ├── net_ens33.csv
│   ├── result.csv
│   ├── runInfo.csv
│   └── sys_info.csv
└── run.properties1 directory, 6 files
[root@localhost my_result_2020-11-13_150933]# 

测试生成的是 .csv格式的数据文件,可以使用 run目录下的 generateReport.sh脚本生成一份HTML格式的测试报告,但此脚本依赖R语言,需要安装R语言后,才能执行。

安装R语言

由于使用手动编译安装的方式会遇到很多依赖错误,此处介绍使用 yum安装的方式。

配置EPEL镜像仓库(关于EPEL的概念参考[[EPEL介绍]])

yum install .noarch.rpm

配置完成后,更新yum仓库。(也可不更新,此操作耗时较长)

yum -y update

安装R语言

yum -y install R

安装中如果报错 获取 GPG 密钥失败:[Errno 14] curl#3...之类的错误,可直接使用下列命令:

rpm --import /etc/pki/rpm-gpg/RPM*

安装完成后,输入 R进入R语言控制台,出现下列命令提示即为安装成功

[root@localhost my_result_2020-11-13_150933]# RR version 3.6.0 (2019-04-26) -- "Planting of a Tree"
Copyright (C) 2019 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)R是自由软件,不带任何担保。
在某些条件下你可以将其自由散布。
用'license()'或'licence()'来看散布的详细条件。R是个合作计划,有许多人为之做出了贡献.
用'contributors()'来看合作者的详细情况
用'citation()'会告诉你如何在出版物中正确地引用R或R程序包。用'demo()'来看一些示范程序,用'help()'来阅读在线帮助文件,或
用'help.start()'通过HTML浏览器来看帮助文件。
用'q()'退出R.>

生成

执行 ./generateReport.sh 测试结果集文件夹命令生成,如

[root@localhost run]# pwd
/opt/benchmarksql-5.0/run
[root@localhost run]# 
[root@localhost run]# ./generateReport.sh my_result_2020-11-13_151641/
Generating my_result_2020-11-13_151641//tpm_nopm.png ... OK
Generating my_result_2020-11-13_151641//latency.png ... OK
Generating my_result_2020-11-13_151641//cpu_utilization.png ... OK
Generating my_result_2020-11-13_151641//dirty_buffers.png ... OK
Generating my_result_2020-11-13_151641//blk_sda_iops.png ... OK
Generating my_result_2020-11-13_151641//blk_sda_kbps.png ... OK
Generating my_result_2020-11-13_151641//net_ens33_iops.png ... OK
Generating my_result_2020-11-13_151641//net_ens33_kbps.png ... OK
Generating my_result_2020-11-13_151641//report.html ... OK
[root@localhost run]# tree /opt/benchmarksql-5.0/run/my_result_2020-11-13_151641/
/opt/benchmarksql-5.0/run/my_result_2020-11-13_151641/
├── blk_sda_iops.png
├── blk_sda_kbps.png
├── cpu_utilization.png
├── data
│   ├── blk_sda.csv
│   ├── net_ens33.csv
│   ├── result.csv
│   ├── runInfo.csv
│   ├── sys_info.csv
│   └── tx_summary.csv
├── dirty_buffers.png
├── latency.png
├── net_ens33_iops.png
├── net_ens33_kbps.png
├── report.html
├── run.properties
└── tpm_nopm.png1 directory, 16 files
[root@localhost run]# 

执行此命令后,会根据之前生成的数据文件生成对应的图片和一个名为 report.html的文件,双击此文件即可查看性能测试的结果。

附录

props.dm文件参数解释

[root@localhost run]# cat props.dm
# 数据库类型
db=dm
driver=dm.jdbc.driver.DmDriver
conn=jdbc:dm://192.168.159.129:5236
user=bench
password=dameng@123# 仓库数量,根据服务器内存配置。BenchmarkSQL数据库每个warehouse大小大概是100MB,如果该参数设置
# 为10,那整个数据库的大小大概在1000MB。建议将数据库的大小设置为服务器物理内存的2-5倍,如果服务器
# 内存为16GB,那么warehouse设置建议在328~819之间。
warehouses=3# 用于在数据库中初始化数据的加载进程数量,默认为4,实际使用过程中可以根据实际情况调整,加载速度
# 会随worker数量的增加而有所提升
loadWorkers=4# 终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍,如果服务器为双核16线程(单核8线程),
# 那么建议配置在32~96之间。
terminals=16//To run specified transactions per terminal- runMins must equal zero
# 每个终端(terminal)运行的固定事务数量,例如:如果该值设置为10,意味着每个terminal运行10个事
# 务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必
# 须设置为0
runTxnsPerTerminal=0//To run for specified minutes- runTxnsPerTerminal must equal zero
# 要测试的整体时间,单位为分钟,如果runMins设置为60,那么测试持续1小时候结束。该值设置为非0值时,
# runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设置为正整数,如果设置其中一个,另一个必
# 须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。
runMins=5//Number of total transactions per minute
# 每分钟事务总数限制,该参数主要控制每分钟处理的事务数,事务数受terminals参数的影响,如果
# terminals数量大于limitTxnsPerMin值,意味着并发数大于每分钟事务总数,该参数会失效,想想也是如
# 此,如果有1000个并发同时发起,那每分钟事务数设置为300就没意义了,上来就是1000个并发,所以要让
# 该参数有效,可以设置数量大于并发数,或者让其失效,测试过程中目前采用的是默认300。
limitTxnsPerMin=0//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
# 终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置
# 为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默
# 认值true。
terminalWarehouseFixed=true//The following five values must add up to 100
//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
# 下面五个值的总和必须等于100,默认值为:45, 43, 4, 4,4 ,与TPC-C测试定义的比例一致,实际操作
# 过程中,可以调整比重来适应各种场景。
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
# 测试数据生成目录,默认无需修改,默认生成在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# 操作系统中被收集服务器的网卡名称和磁盘名称,例如:使用ifconfig查看操作系统网卡名称,找到测试所
# 走的网卡,名称为ens32,那么下面网卡名设置为net_ens32(net_前缀固定),使用df -h查看数据库数据
# 目录,名称为(/dev/sdb                33T   18T   16T   54% /hgdata),那么下面磁盘名设置
# 为blk_sdb(blk_前缀固定)
osCollectorDevices=net_ens33 blk_sda
[root@localhost run]# 

测试逻辑示例

测试过程中的整体逻辑通过一个例子来说明:假如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/分钟。

runTxnsPerTerminal:参数用于指定每个终端提交事务数,这个参数与runMins只能选择设置其中一个,另一个必须设置为0
runTxnsPerTerminal=100
runMins=0

runMins:参数用于指定运行时间,单位是分钟,这个参数与runTxnsPerTerminal只能选择设置其中一个,另一个必须设置为0
runTxnsPerTerminal=0
runMins=12

limitTxnsPerMin:参数用于指定每分钟提交事务数限制,设置太小,压力会不够,如果测试结果不能接近该值就代表压力足够,limitTxnsPerMin=100000

Measured tpmc是测量每分钟tpmc即tpcc每分钟的吞吐量。按有效tpcc配置期间每分钟处理的平均交易次数测量。单位是tpmc,每分钟系统处理的新订单个数。

Measured tpmC (NewOrders) = 30082.27,每分钟新订单数为30082.27
Measured tpmTOTAL = 66751.79,每分钟处理的总数为66751.79
Transaction Count = 333877,5分钟处理的总数为333877

更多推荐

使用BenchMarkSQL对DM数据库进行性能测试。

本文发布于:2024-03-23 16:44:28,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740477.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:性能测试   数据库   BenchMarkSQL   DM

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!