mysql benchmark 测试工具_BenchmarkSQL数据库基准测试工具

本文介绍了如何使用BenchmarkSQL,一个基于JDBC的数据库基准测试工具,支持多种数据库,包括PostgreSQL和MySQL。文章详细阐述了在CentOS7环境下安装所需的Java、Ant、R语言等软件,以及BenchmarkSQL的编译和配置过程,特别是针对MySQL的TPC-C测试的源码修改和脚本调整。最后,讲解了如何配置测试参数文件和执行测试,并生成测试结果报告。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前有介绍过sysbench基准测试工具,类似的开源测试工具还有BenchmarkSQL,一个JDBC基准测试工具,内嵌了TPC-C测试脚本,也支持很多数据库,如PostgreSQL、Oracle和Mysql等。

1、软件环境

系统用CentOS7

Java,因为BenchmarkSQL本身是使用Java语言编写的,所以如果在Linux系统下还没有安装JDK的话,我们首先需要对其进行安装

数据库,本例先介绍PostgreSQL和Mysql

Ant,用来对BenchmarkSQL进行编译

EPEL仓库

R语言,用来生成图形报告

以及上述软件的依赖。

2、安装过程

2.1、安装ant

yum -y install ant

2.2、安装EPEL仓库

安装 su -c 'rpm -Uvh https://download.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm'

更新 yum -y update

2.3、安装R语言

yum -y install R

2.4、安装BenchmarkSQL

在下载地址中下载所需的包,上传至服务器后完成解压:unzip ./benchmarksql-5.0.zip

进入解压后的目录用ant编译

cd benchmarksql

ant

此时会编译出一个版本 benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar,但是该版本并不支持MySQL的TPC-C测试,需要做如下的修改。

修改benchmarksql源码

(1)修改benchmarksql-5.0/src/client/jTPCC.java,增加mysql相关部分,如下所示:

if (iDB.equals("firebird"))

dbType = DB_FIREBIRD;

else if (iDB.equals("oracle"))

dbType = DB_ORACLE;

else if (iDB.equals("postgres"))

dbType = DB_POSTGRES;

else if (iDB.equals("mysql"))

dbType = DB_UNKNOWN;

else

{

log.error("unknown database type '" + iDB + "'");

return;

}

(2)修改benchmarksql-5.0/src/client/jTPCCConnection.java, SQL子查询增加"AS L"别名,如下所示:

default:

stmtStockLevelSelectLow = dbConn.prepareStatement(

"SELECT count(*) AS low_stock FROM (" +

" SELECT s_w_id, s_i_id, s_quantity " +

" FROM bmsql_stock " +

" WHERE s_w_id = ? AND s_quantity < ? AND s_i_id IN (" +

" SELECT ol_i_id " +

" FROM bmsql_district " +

" JOIN bmsql_order_line ON ol_w_id = d_w_id " +

" AND ol_d_id = d_id " +

" AND ol_o_id >= d_next_o_id - 20 " +

" AND ol_o_id < d_next_o_id " +

" WHERE d_w_id = ? AND d_id = ? " +

" ) " +

" )AS L");

break;

重新编译修改后的源码,此时得到的benchmarksql版本 benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar 已经支持MySQL的TPC-C测试。

cd benchmarksql-5.0

ant

修改相关脚本,支持Mysql

(1)修改 文件:benchmarksql-5.0/run/funcs.sh,添加mysql 数据库类型。

function setCP()

{

case "$(getProp db)" in

firebird)

cp="../lib/firebird/*:../lib/*"

;;

oracle)

cp="../lib/oracle/*"

if [ ! -z "${ORACLE_HOME}" -a -d ${ORACLE_HOME}/lib ] ; then

cp="${cp}:${ORACLE_HOME}/lib/*"

fi

cp="${cp}:../lib/*"

;;

postgres)

cp="../lib/postgres/*:../lib/*"

;;

mysql)

cp="../lib/mysql/*:../lib/*"

;;

esac

myCP=".:${cp}:../dist/*"

export myCP

}

...省略

case "$(getProp db)" in

firebird|oracle|postgres|mysql)

;;

"") echo "ERROR: missing db= config option in ${PROPS}" >&2

exit 1

;;

*) echo "ERROR: unsupported database type 'db=$(getProp db)' in ${PROPS}" >&2

exit 1

;;

esac

(2)添加mysql java connector驱动,下载对应版本的驱动,官网下载地址,如8.0以上版本下载对应的驱动mysql-connector-java-8.0.18.jar 需自行下载。

mkdir -p benchmarksql-5.0/lib/mysql

cp mysql-connector-java-8.0.18.jar benchmarksql-5.0/lib/mysql/

(3)修改benchmarksql-5.0/run/runDatabaseBuild.sh,去掉extraHistID

AFTER_LOAD="indexCreates foreignKeys extraHistID buildFinish"

修改为:

AFTER_LOAD="indexCreates foreignKeys buildFinish"

2.5、配置测试参数文件

配置

cd run

cp props.pg postgres.properties

cp props.pg mysql.properties

vim postgres.properties

vim mysql.properties

配置文件详解:

db=postgres //数据库类型,postgres,mysql

driver=org.postgresql.Driver //驱动,mysql8.0以上为com.mysql.cj.jdbc.Driver

conn=jdbc:postgresql://localhost:5432/postgres //PG数据库连接字符串,正常情况下,需要更改localhost为对应PG服务IP、5432位对应PG服务端口、postgres为对应测试数据库名

user=benchmarksql //数据库用户名,通常建议用默认,这就需要我们提前在数据库中建立benchmarksql用户

password=PWbmsql //如上用户密码

warehouses=1 //仓库数量,数量根据实际服务器内存配置,配置方法见第3步

loadWorkers=4 //用于在数据库中初始化数据的加载进程数量,默认为4,实际使用过程中可以根据实际情况调整,加载速度会随worker数量的增加而有所提升

terminals=1 //终端数,即并发客户端数量,通常设置为CPU线程总数的2~6倍

runTxnsPerTerminal=10 //每个终端(terminal)运行的固定事务数量,例如:如果该值设置为10,意味着每个terminal运行10个事务,如果有32个终端,那整体运行320个事务后,测试结束。该参数配置为非0值时,下面的runMins参数必须设置为0

runMins=0 //要测试的整体时间,单位为分钟,如果runMins设置为60,那么测试持续1小时候结束。该值设置为非0值时,runTxnsPerTerminal参数必须设置为0。这两个参数不能同时设置为正整数,如果设置其中一个,另一个必须为0,主要区别是runMins定义时间长度来控制测试时间;runTxnsPerTerminal定义事务总数来控制时间。

limitTxnsPerMin=300 //每分钟事务总数限制,该参数主要控制每分钟处理的事务数,事务数受terminals参数的影响,如果terminals数量大于limitTxnsPerMin值,意味着并发数大于每分钟事务总数,该参数会失效,想想也是如此,如果有1000个并发同时发起,那每分钟事务数设置为300就没意义了,上来就是1000个并发,所以要让该参数有效,可以设置数量大于并发数,或者让其失效,测试过程中目前采用的是默认300。

terminalWarehouseFixed=true //终端和仓库的绑定模式,设置为true时可以运行4.x兼容模式,意思为每个终端都有一个固定的仓库。设置为false时可以均匀的使用数据库整体配置。TPCC规定每个终端都必须有一个绑定的仓库,所以一般使用默认值true。

//下面五个值的总和必须等于100,默认值为:45, 43, 4, 4 & 4 ,与TPC-C测试定义的比例一致,实际操作过程中,可以调整比重来适应各种场景。

newOrderWeight=45

paymentWeight=43

orderStatusWeight=4

deliveryWeight=4

stockLevelWeight=4

resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS //测试数据生成目录,默认无需修改,默认生成在run目录下面,名字形如my_result_xxxx的文件夹。

osCollectorScript=./misc/os_collector_linux.py //操作系统性能收集脚本,默认无需修改,需要操作系统具备有python环境

osCollectorInterval=1 //操作系统收集操作间隔,默认为1秒

//osCollectorSSHAddr=user@dbhost //操作系统收集所对应的主机,如果对本机数据库进行测试,该参数保持注销即可,如果要对远程服务器进行测试,请填写用户名和主机名。

osCollectorDevices=net_eth0 blk_sda //操作系统中被收集服务器的网卡名称和磁盘名称,例如:使用ifconfig查看操作系统网卡名称,找到测试所走的网卡,名称为enp1s0f0,那么下面网卡名设置为net_enp1s0f0(net_前缀固定);使用df -h查看数据库数据目录,名称为(/dev/sdb 33T 18T 16T 54% /hgdata),那么下面磁盘名设置为blk_sdb(blk_前缀固定)

2.6、进行测试

执行当前路径下的shell脚本:

./runDatabaseBuild.sh my_postgres.properties

./runBenchmark.sh my_postgres.properties

[NOTE]

测试之前要在数据库中创建相应的database和user,还要注意权限的问题。

2.7、结果处理

测试结束后,run目录下会生成一个新目录,它的命名格式为 my_result_%tY-%tm-%td_%tH%tM%tS。

使用 generateReport.sh my_result_* 脚本创建具有图形的 HTML 文件:

例如:

./generateReport.sh my_result_2018-09-30_133047

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值