0
点赞
收藏
分享

微信扫一扫

BenchmarkSQL for DB2

0.前言

最近在做数据选型(支持mysql驱动的国产数据库),所以头痛怎么做压力测试,由于没有资源找业务系统来帮忙做压测,所以就想偷懒找一款TPCC基准测试工具来做此事,由于我司主力是使用IBM的DB2,所以优先考虑支持DB2的基准测试工具(如果不是因为DB2事实上选择没这么难)。

其实,以前也并非没有研究过,奈何真的不太容易,在此简单的说明一下我之前测试过的基准工具:

sysbench:最简单易用的基准测试工具,只能支持Oracle、MySQL、PostgresSQL,现在大多所谓的国产数据库均支持mysql或pg的驱动,sysben支持度高,可惜不支持DB2,被我pass掉了,但我会用它来做磁盘的IO测试;

HammerDB:支持主流的Oracle、MySQL及非主流的DB2,但在测试一些支持mysql协议的国产数据库时会遇到一些问题,语法不兼容还好一点可以修改tcl的脚本对应,由于它会用到很多DB本身的管理类API(如ob上很多variables是没有的),如果DB本身不提供那就没辙了,因此也被我passr掉了。而且,HammerDB在LOAD数据时比较容易出错,而且界面输出log的话非常卡顿。

BenchmarkSQL:使用JDBC驱动,兼容性各类DB是最好的,经多次碰壁后我选择了bmsql,但问题是网上并没有找到怎么修改源码以适应DB2的测试,于是潜心研究多天后发现其实也并不难,在此贡献全网首篇BenchmakSQL for DB2的部署教程。

BenchmarkSQL for DB2_BenchmarkSQL

1.参考网址

(1)源码的下载

​​https://github.com/wieck/benchmarksql​​

(2)官网文档说明

​​https://benchmarksql.readthedocs.io/en/latest/​​

2.编译jar包

由于bmsql并不直接支持DB2,故需要修改相关的源码,再编译为jar包,此操作对非Oracle、postgresSQL的关系型数据库同样式,包括mysql及其衍生的数据库。bmsql对数据库的操作是通过JDBC执行,没有使用DB内部的函数或监控API,通用性更强,故在修改源码主要关注一些SQL语法的少量调整即可。

以下是针对DB2修改的部分:

2.1 修改jTPCC.java

修改benchmarksql-master\src\main\java\com\github\pgsqlio\benchmarksql\jtpcc\jTPCC.java,的以下部分,添加支持DB2的db类型:

    if (iDBType.equals("oracle"))
dbType = jTPCCConfig.DB_ORACLE;
else if (iDBType.equals("postgres"))
dbType = jTPCCConfig.DB_POSTGRES;
else if (iDBType.equals("firebird"))
dbType = jTPCCConfig.DB_FIREBIRD;
else if (iDBType.equals("mariadb"))
dbType = jTPCCConfig.DB_MARIADB;
else if (iDBType.equals("transact-sql"))
dbType = jTPCCConfig.DB_TSQL;
else if (iDBType.equals("babelfish"))
dbType = jTPCCConfig.DB_BABELFISH;
// ## add codes,for DB2
else if (iDBType.equals("db2"))
dbType = jTPCCConfig.DB_UNKNOWN;
// ##
else {
log.error("Unknown database type '{}'", iDBType);
return;
}

2.2 修改pom.xml

以下属性对应的是JDK的版本,但我使用JDK11的环境编译异常,所以我将11修改为1.8,并使用了1.8的JDK环境编译成功。

<!-- TODO To change when this project use github pages -->
<url>https://github.com/pgsql-io/benchmarksql</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>

2.3 编译

进入 在目录benchmarksql-master下,执行mvn命令,编译成功后可以生成target目录。

//可以提前mvn clean
mvn

*maven编译环境自行搭建

3.修改脚本

3.1 ​​修改funcs.sh​​

benchmarksql-master\target\​​run目录下的funcs.sh​​,修改内容如下:

function setCP()
{
case "$(getProp db)" in
oracle)
cp="../lib/*"
if [ ! -z "${ORACLE_HOME}" -a -d ${ORACLE_HOME}/lib ] ; then
cp="${cp}:${ORACLE_HOME}/lib/*"
fi
cp="${cp}:../lib/*"
;;
postgres)
cp="../lib/*"
;;
firebird)
cp="../lib/*"
;;
mariadb)
cp="../lib/*"
;;
transact-sql)
cp="../lib/*"
;;
babelfish)
cp="../lib/*"
;;
db2)
cp="../lib/*"
;;
esac
myCP="./:../BenchmarkSQL.jar:${cp}"
export myCP
}

# ----
# Make sure that the properties file does have db= and the value
# is a database, we support.
# ----
db=$(getProp db)
case "${db}" in
oracle|postgres|firebird|mariadb|transact-sql|babelfish|db2)
;;
"") echo "ERROR: missing db= config option in ${PROPS}" >&2
exit 1
;;
*) echo "ERROR: unsupported database type db=${db} in ${PROPS}" >&2
exit 1
;;
esac

3.2 修改sql

如果是非官方支持的数据库,Build过程主要执行以下目录的脚本:benchmarksql-master\target\run\sql.common。其中tableCreates.sql中的建表语句不符DB2的语法,只需要在primary key前加上not null即可如下:

create table bmsql_config (
cfg_name varchar(30) NOT NULL primary key,
cfg_value varchar(50)
);

3.3 添加DB2驱动jar包

将DB2的驱动jar包拷贝至目录下:benchmarksql-master\target\lib,驱动主要有以下:

db2jcc.jar
db2jcc4.jar
db2jcc_license_cu.jar

*可能只需要其中一两个而已,但我懒得测试~~

3.4 修改配置文件

在\benchmarksql-master\target\run目录下,将sample.transact-sql.properties(其他文件也可以的)拷贝文件为sample.db2.properties,主要修改的内容为以下:

# General Driver and connection parameters
#
# db={ postgres | oracle | firebird | mariadb | transact-sql }
# driver=<JDBC_DRIVER_CLASS>
# application={ Generic | PostgreSQLStoredProc | OracleStoredProc }
# conn=<JDBC_URI>
# user=<USERNAME>
# password=<PASSWORD>
db=db2
driver=com.ibm.db2.jcc.DB2Driver
application=Generic
conn=jdbc:db2://192.168.1.11:59900/TPCC
user=tpcc
password=AAaa11__

4.执行测试

上述修改完成后,可以开始进行运行测试,如下:

## 创建测试数据
./runDatabseBuild.sh sample.db2.properties

## 运行压力测试
./runBenchmark.sh sample.db2.properties

*具体测试方法作业另行章节介绍

举报

相关推荐

0 条评论