benchmarksql5是数据库TPCC测试的主要工具。但工具默认并没有添加对达梦数据库的支持。所以需要对benchmarksql5重编译,以支持达梦数据库。
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
[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脚本需要)
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
[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]$
[dmdba@dms benchmark_sql]$ cd benchmarksql-5.0/ lib/
[dmdba@dms lib]$ mkdir dameng
[dmdba@dms lib]$ cp ~/dmdbms/drivers/jdbc/DmJdbcDriver8.jar ./dameng
该脚本有以下功能:
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/*"
;;
修改前:
修改后:
修改前
修改后:
/dmdba/benchmark_sql/benchmarksql-5.0/src/client
vim jTPCCConfig.java
修改前:
修改后:
/dmdba/benchmark_sql/benchmarksql-5.0/src/client
vim jTPCC.java
修改前:
修改后:
编译安装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
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
[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.
-- ----
[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
检查是否支持png格式:
R
> capabilities()
> quit()
生成图像:
如果只想查看测试过程中系统资源使用情况以及事务处理速度的图形化信息,可以选择调用generateGraphs.sh只生成图像。
./generateGraphs.sh my_result_2025-08-04_142049
生成图像和报告:
如果想看更详细的报告,可以调用generateReport.sh生成图像并生成报告。
./generateReport.sh my_result_2025-08-04_142049
标识符有问题,逗号和分号
[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后面的;(分号)为,(逗号)。
[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下所有驱动,导致驱动文件识别有误。
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不限制即可。
文章
阅读量
获赞