注册
DM数据库TPC-C测试工具BenchmarkSQL操作验证
技术分享/ 文章详情 /

DM数据库TPC-C测试工具BenchmarkSQL操作验证

WXY是对称的 2025/08/15 37 0 0

DM数据库TPC-C测试工具BenchmarkSQL操作验证

一、 BenchmarkSQL介绍

benchmarksql5是数据库TPCC测试的主要工具。但工具默认并没有添加对达梦数据库的支持。所以需要对benchmarksql5重编译,以支持达梦数据库。

二、 实操验证:

1. 工具准备

相关工具准备:

benchmarkSQL工具:https://sourceforge.net/projects/benchmarksql/
ant工具:yum -y install ant
R语言下载: https://mirror.bjtu.edu.cn/cran/src/base/R-3/R-3.6.3.tar.gz
JDK下载:https://www.oracle.com/cn/java/technologies/downloads/#java8

其他依赖参考:

yum install -y gcc glibc-headers gcc-c++ gcc-gfortran readline-devel libXt-devel pcre-devel libcurl libcurl-devel ncurses ncurses-devel autoconf automake zlib zlib-devel bzip2 bzip2-devel xz-devel java-1.8.0-openjdk ant

2. 安装实施

2.1 安装ant

[root@dms ~]# yum -y install ant
已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.
Determining fastest mirrors
 * epel: d2lzkl7pfhq30w.cloudfront.net
软件包 ant-1.9.2-9.el7.noarch 已安装并且是最新版本
无须任何处理

2.2 安装R语言

安装并启用 epel-release 依赖:
yum install epel-release -y
tar -zxf R-3.6.3.tar.gz
cd R-3.6.3
./configure
make
make  install
###(generateReport.sh脚本需要)

2.3 准备java环境

tar  -xf   jdk-8u271-linux-x64.tar.gz 
mv jdk-8u271-linux-x64 /usr/local/jdk
echo "
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib
export PATH=\$JAVA_HOME/bin:\$PATH
">> /etc/profile 

2.4 解压benchmarkSQL

[dmdba@dms benchmark_sql]$ unzip benchmarksql-5.0.zip
Archive:  benchmarksql-5.0.zip
6036b15716cf8c142465ac8092d53a777d609684
   creating: benchmarksql-5.0/
 extracting: benchmarksql-5.0/.gitignore
  inflating: benchmarksql-5.0/HOW-TO-RUN.txt
  inflating: benchmarksql-5.0/README.md
  inflating: benchmarksql-5.0/build.xml
   creating: benchmarksql-5.0/doc/
   creating: benchmarksql-5.0/doc/src/
  inflating: benchmarksql-5.0/doc/src/TimedDriver.odt
   creating: benchmarksql-5.0/lib/
 extracting: benchmarksql-5.0/lib/.gitignore
  inflating: benchmarksql-5.0/lib/apache-log4j-extras-1.1.jar
   creating: benchmarksql-5.0/lib/firebird/
  inflating: benchmarksql-5.0/lib/firebird/connector-api-1.5.jar
  inflating: benchmarksql-5.0/lib/firebird/jaybird-2.2.9.jar
  inflating: benchmarksql-5.0/lib/log4j-1.2.17.jar
   creating: benchmarksql-5.0/lib/oracle/
 extracting: benchmarksql-5.0/lib/oracle/.gitignore
  inflating: benchmarksql-5.0/lib/oracle/README.txt
   creating: benchmarksql-5.0/lib/postgres/
  inflating: benchmarksql-5.0/lib/postgres/postgresql-9.3-1102.jdbc41.jar
   creating: benchmarksql-5.0/run/
 extracting: benchmarksql-5.0/run/.gitignore
  inflating: benchmarksql-5.0/run/funcs.sh
  inflating: benchmarksql-5.0/run/generateGraphs.sh
  inflating: benchmarksql-5.0/run/generateReport.sh
  inflating: benchmarksql-5.0/run/log4j.properties
   creating: benchmarksql-5.0/run/misc/
  inflating: benchmarksql-5.0/run/misc/blk_device_iops.R
  inflating: benchmarksql-5.0/run/misc/blk_device_kbps.R
  inflating: benchmarksql-5.0/run/misc/cpu_utilization.R
  inflating: benchmarksql-5.0/run/misc/dirty_buffers.R
  inflating: benchmarksql-5.0/run/misc/latency.R
  inflating: benchmarksql-5.0/run/misc/net_device_iops.R
  inflating: benchmarksql-5.0/run/misc/net_device_kbps.R
  inflating: benchmarksql-5.0/run/misc/os_collector_linux.py
  inflating: benchmarksql-5.0/run/misc/tpm_nopm.R
  inflating: benchmarksql-5.0/run/props.fb
  inflating: benchmarksql-5.0/run/props.ora
  inflating: benchmarksql-5.0/run/props.pg
  inflating: benchmarksql-5.0/run/runBenchmark.sh
  inflating: benchmarksql-5.0/run/runDatabaseBuild.sh
  inflating: benchmarksql-5.0/run/runDatabaseDestroy.sh
  inflating: benchmarksql-5.0/run/runLoader.sh
  inflating: benchmarksql-5.0/run/runSQL.sh
   creating: benchmarksql-5.0/run/sql.common/
  inflating: benchmarksql-5.0/run/sql.common/buildFinish.sql
  inflating: benchmarksql-5.0/run/sql.common/foreignKeys.sql
  inflating: benchmarksql-5.0/run/sql.common/indexCreates.sql
  inflating: benchmarksql-5.0/run/sql.common/indexDrops.sql
  inflating: benchmarksql-5.0/run/sql.common/tableCreates.sql
  inflating: benchmarksql-5.0/run/sql.common/tableDrops.sql
  inflating: benchmarksql-5.0/run/sql.common/tableTruncates.sql
   creating: benchmarksql-5.0/run/sql.firebird/
  inflating: benchmarksql-5.0/run/sql.firebird/extraHistID.sql
   creating: benchmarksql-5.0/run/sql.oracle/
  inflating: benchmarksql-5.0/run/sql.oracle/extraHistID.sql
   creating: benchmarksql-5.0/run/sql.postgres/
  inflating: benchmarksql-5.0/run/sql.postgres/buildFinish.sql
  inflating: benchmarksql-5.0/run/sql.postgres/extraHistID.sql
  inflating: benchmarksql-5.0/run/sql.postgres/tableCopies.sql
   creating: benchmarksql-5.0/src/
   creating: benchmarksql-5.0/src/LoadData/
  inflating: benchmarksql-5.0/src/LoadData/LoadData.java
  inflating: benchmarksql-5.0/src/LoadData/LoadDataWorker.java
   creating: benchmarksql-5.0/src/OSCollector/
  inflating: benchmarksql-5.0/src/OSCollector/OSCollector.java
   creating: benchmarksql-5.0/src/client/
  inflating: benchmarksql-5.0/src/client/jTPCC.java
  inflating: benchmarksql-5.0/src/client/jTPCCConfig.java
  inflating: benchmarksql-5.0/src/client/jTPCCConnection.java
  inflating: benchmarksql-5.0/src/client/jTPCCRandom.java
  inflating: benchmarksql-5.0/src/client/jTPCCTData.java
  inflating: benchmarksql-5.0/src/client/jTPCCTerminal.java
  inflating: benchmarksql-5.0/src/client/jTPCCUtil.java
   creating: benchmarksql-5.0/src/jdbc/
  inflating: benchmarksql-5.0/src/jdbc/ExecJDBC.java
[dmdba@dms benchmark_sql]$

2.5 添加驱动和依赖库

[dmdba@dms benchmark_sql]$ cd benchmarksql-5.0/ lib/
[dmdba@dms lib]$ mkdir dameng
[dmdba@dms lib]$ cp ~/dmdbms/drivers/jdbc/DmJdbcDriver8.jar ./dameng

2.6 修改脚本文件

2.6.1 修改funcs.sh

该脚本有以下功能:
a)获取参数文件中配置的参数
b)获取在当前数据库环境运行java程序所需要的classpath
后面的许多脚本,例如执行SQL脚本的脚本runSQL.sh,生成数据脚本runLoader.sh,运行benchmarksql程序脚本runBenchmark.sh中都调用了funcs.sh脚本。

该脚本有两处需要改动,分别为40行左右和50行左右,具体入下文:

cd /dmdba/benchmark_sql/benchmarksql-5.0/run

1)40行后面新增三行(41-43行)

        dameng)
            cp="../lib/dameng/*:../lib/*"
            ;;

修改前:
image.png

修改后:
image.png

修改前
image.png

修改后:
image.png

2.6.2 修改jTPCCConfig.java

/dmdba/benchmark_sql/benchmarksql-5.0/src/client
vim jTPCCConfig.java

修改前:
image.png
修改后:
image.png

2.6.3 修改jTPCC.java

/dmdba/benchmark_sql/benchmarksql-5.0/src/client
vim jTPCC.java

修改前:
image.png
修改后:
image.png

2.7 修改完成后,编译:

编译安装benchmarkSQL:

[dmdba@dms benchmark_sql]$ cd benchmarksql-5.0/
 [dmdba@dms benchmarksql-5.0]$ ant
Buildfile: /dmdba/benchmark_sql/benchmarksql-5.0/build.xml

init:

compile:
    [javac] Compiling 11 source files to /dmdba/benchmark_sql/benchmarksql-5.0/build

dist:
      [jar] Building jar: /dmdba/benchmark_sql/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar

BUILD SUCCESSFUL
Total time: 1 second

3. 测试使用:

3.1 准备参数文件

cd /dmdba/benchmark_sql/benchmarksql-5.0/run
cp sql.oracle  sql.dameng  -r 
cp  props.ora   props.dm
vim  props.dm
cat  props.dm
db=dameng
driver=dm.jdbc.driver.DmDriver
conn=jdbc:dm://127.0.0.1:5236
user=wang
password=Wangyang123

warehouses=1
loadWorkers=4

terminals=1
//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=300

//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
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_eth0 blk_sda

3.2 执行数据生成

[dmdba@dms run]$ ./runDatabaseBuild.sh props.dm
# ------------------------------------------------------------
# Loading SQL file ./sql.dameng/tableCreates.sql
# ------------------------------------------------------------
create table bmsql_config (
cfg_name    varchar(30) primary key,
cfg_value   varchar(50)
);
create table bmsql_warehouse (
w_id        integer   not null,
w_ytd       decimal(12,2),
w_tax       decimal(4,4),
w_name      varchar(10),
w_street_1  varchar(20),
w_street_2  varchar(20),
w_city      varchar(20),
w_state     char(2),
w_zip       char(9)
···········
s_dist_09    char(24),
s_dist_10    char(24)
);
Starting BenchmarkSQL LoadData

driver=dm.jdbc.driver.DmDriver
conn=jdbc:dm://127.0.0.1:5236
user=wang
password=***********
warehouses=1
loadWorkers=4
fileLocation (not defined)
csvNullValue (not defined - using default 'NULL')

Worker 000: Loading ITEM
Worker 001: Loading Warehouse      1
Worker 000: Loading ITEM done
 Worker 001: Loading Warehouse      1 done
# ------------------------------------------------------------
# Loading SQL file ./sql.dameng/indexCreates.sql
# ------------------------------------------------------------
alter table bmsql_warehouse add constraint bmsql_warehouse_pkey
primary key (w_id);
alter table bmsql_district add constraint bmsql_district_pkey
primary key (d_w_id, d_id);
alter table bmsql_customer add constraint bmsql_customer_pkey
primary key (c_w_id, c_d_id, c_id);
·············
foreign key (s_w_id)
references bmsql_warehouse (w_id);
alter table bmsql_stock add constraint s_item_fkey
foreign key (s_i_id)
references bmsql_item (i_id);
ERROR: Cannot locate SQL file for extraHistID
# ------------------------------------------------------------
# Loading SQL file ./sql.dameng/buildFinish.sql
# ------------------------------------------------------------
-- ----
-- Extra commands to run after the tables are created, loaded,
-- indexes built and extra's created.
-- ----

3.3 执行压测

[dmdba@dms run]$ ./runBenchmark.sh props.dm
16:06:14,481 [main] INFO   jTPCC : Term-00,
16:06:14,483 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:06:14,484 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
16:06:14,484 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:06:14,484 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa
16:06:14,484 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier
16:06:14,487 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck
16:06:14,488 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:06:14,488 [main] INFO   jTPCC : Term-00,
16:06:14,488 [main] INFO   jTPCC : Term-00, db=dameng
16:06:14,488 [main] INFO   jTPCC : Term-00, driver=dm.jdbc.driver.DmDriver
16:06:14,488 [main] INFO   jTPCC : Term-00, conn=jdbc:dm://127.0.0.1:5236
16:06:14,489 [main] INFO   jTPCC : Term-00, user=wang
16:06:14,489 [main] INFO   jTPCC : Term-00,
16:06:14,489 [main] INFO   jTPCC : Term-00, warehouses=1
16:06:14,489 [main] INFO   jTPCC : Term-00, terminals=1
16:06:14,491 [main] INFO   jTPCC : Term-00, runMins=1
16:06:14,492 [main] INFO   jTPCC : Term-00, limitTxnsPerMin=0
16:06:14,492 [main] INFO   jTPCC : Term-00, terminalWarehouseFixed=true
16:06:14,492 [main] INFO   jTPCC : Term-00,
16:06:14,492 [main] INFO   jTPCC : Term-00, newOrderWeight=45
16:06:14,492 [main] INFO   jTPCC : Term-00, paymentWeight=43
16:06:14,492 [main] INFO   jTPCC : Term-00, orderStatusWeight=4
16:06:14,492 [main] INFO   jTPCC : Term-00, deliveryWeight=4
16:06:14,492 [main] INFO   jTPCC : Term-00, stockLevelWeight=4

4. 报告整理:

4.1 查看R语言安装情况

检查是否支持png格式:
R
> capabilities()
> quit()

4.2 生成报告

生成图像:
如果只想查看测试过程中系统资源使用情况以及事务处理速度的图形化信息,可以选择调用generateGraphs.sh只生成图像。

./generateGraphs.sh my_result_2025-08-04_142049

生成图像和报告:
如果想看更详细的报告,可以调用generateReport.sh生成图像并生成报告。

./generateReport.sh my_result_2025-08-04_142049

三、 报错处理:

1. 报错1:

标识符有问题,逗号和分号

[dmdba@dms benchmarksql-5.0]$ cd /dmdba/benchmark_sql/benchmarksql-5.0
[dmdba@dms benchmarksql-5.0]$ ant
Buildfile: /dmdba/benchmark_sql/benchmarksql-5.0/build.xml

init:

compile:
    [javac] Compiling 11 source files to /dmdba/benchmark_sql/benchmarksql-5.0/build
    [javac] /dmdba/benchmark_sql/benchmarksql-5.0/src/client/jTPCCConfig.java:20: 错误: 需要<标识符>
    [javac]                             DB_DAMENG = 4;
    [javac]                                      ^
    [javac] 1 个错误

BUILD FAILED
/dmdba/benchmark_sql/benchmarksql-5.0/build.xml:24: Compile failed; see the compiler error output for details.

Total time: 0 seconds

错误原因:
低级错误,修改配置文件是,“;”分号为段结尾

[dmdba@dms benchmarksql-5.0]$ vi /dmdba/benchmark_sql/benchmarksql-5.0/src/client/jTPCCConfig.java
# 修改DB_POSTGRES = 3后面的;(分号)为,(逗号)。

2. 报错2:

[dmdba@dms run]$ ./runDatabaseBuild.sh props.dm
# ------------------------------------------------------------
# Loading SQL file ./sql.dameng/tableCreates.sql
# ------------------------------------------------------------
Exception in thread "main" java.lang.UnsupportedClassVersionError: dm/jdbc/driver/DmDriver has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at ExecJDBC.main(ExecJDBC.java:31)

原因:
拷贝了driver下所有驱动,导致驱动文件识别有误。

3. 报错3:

16:05:42,939 [main] INFO   jTPCC : Term-00, limitTxnsPerMin=null
16:05:42,940 [main] INFO   jTPCC : Term-00, terminalWarehouseFixed=true
16:05:42,940 [main] INFO   jTPCC : Term-00,
16:05:42,940 [main] INFO   jTPCC : Term-00, newOrderWeight=45
16:05:42,940 [main] INFO   jTPCC : Term-00, paymentWeight=43
16:05:42,940 [main] INFO   jTPCC : Term-00, orderStatusWeight=4
16:05:42,940 [main] INFO   jTPCC : Term-00, deliveryWeight=4
16:05:42,940 [main] INFO   jTPCC : Term-00, stockLevelWeight=4
16:05:42,941 [main] INFO   jTPCC : Term-00,
16:05:42,941 [main] INFO   jTPCC : Term-00, resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
16:05:42,941 [main] INFO   jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
16:05:42,941 [main] INFO   jTPCC : Term-00,
Exception in thread "main" java.lang.NumberFormatException: null
        at java.lang.Integer.parseInt(Integer.java:542)
        at java.lang.Integer.parseInt(Integer.java:615)
        at jTPCC.<init>(jTPCC.java:131)
        at jTPCC.main(jTPCC.java:53)

错误原因:
注释了//limitTxnsPerMin=0
此参数必须是数值类型,不能注释,改为0不限制即可。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服