达梦8-TPCC压力测试

1、系统环境

操作系统版本

银河麒麟Linux kylin10 4.19.90-24.4.v2101.ky10.x86_64

数据库版本

DM Database Server 64 V8

2、软件环境 

压测工具

BenchmarkSQL-5.0

JDK

Jdk 1.8.0_272

编译工具

Apache-ant-1.9.15

DM数据库安装目录

/dm8

压测工具所在目录

/opt/TPCC/benchmarksql-5.0

 

 因为BenchmarkSQL-5.0默认不支持达梦数据库,需要手动修改相应的配置文件,并安装相关驱动。

3、修改配置文件

3.1 修改jTPCC.java文件

文件所在目录路径:/opt/TPCC/benchmarksql-5.0/src/client,在 jTPCC.java添加如下信息:

3.2 修改funcs.sh文件

文件所在目录路径:/opt/TPCC/benchmarksql-5.0/run,添加如下信息

 

3.3 修改runDatabaseBuild.sh文件

文件所在目录路径:/opt/TPCC/benchmarksql-5.0/run,删除extraHistID,如下信息:

3.4 编译

进入压测工具benchmarksql5的目录执行命令

[root@DMDB01 benchmarksql-5.0]# pwd
/opt/TPCC/benchmarksql-5.0
[root@DMDB01 benchmarksql-5.0]# ant
Buildfile: /opt/TPCC/benchmarksql-5.0/build.xml

init:
    [mkdir] Created dir: /opt/TPCC/benchmarksql-5.0/build

compile:
    [javac] Compiling 11 source files to /opt/TPCC/benchmarksql-5.0/build

dist:
    [mkdir] Created dir: /opt/TPCC/benchmarksql-5.0/dist
      [jar] Building jar: /opt/TPCC/benchmarksql-5.0/dist/BenchmarkSQL-5.0.jar

BUILD SUCCESSFUL
Total time: 0 seconds
[root@DMDB01 benchmarksql-5.0]# 

3.5 安装驱动

达梦数据库的驱动目录:/dm8/drivers/jdbc,将目录下的DmJdbcDriver18.jar拷贝到benchmarksql5的lib目录下。

(1)需要先在/opt/TPCC/benchmarksql-5.0/lib下创建“dameng”目录

(2)将达梦数据库的驱动拷贝到/opt/TPCC/benchmarksql-5.0/lib/dameng目录下

因为我的系统中jdk版本是1.8,所以只需要拷贝DmJdbcDriver18.jar

[root@DMDB01 lib]# cp /dm8/drivers/jdbc/DmJdbcDriver18.jar /opt/TPCC/benchmarksql-5.0/lib/dameng

3.6 修改props.dm文件 

需要先创建props.dm配置文件,根据/opt/TPCC/benchmarksql-5.0/run目录下的props.ora文件创建props.dm。

[root@DMDB01 run]# vi props.dm 
db=dameng  #数据库类型,与funcs.sh配置文件一致
driver=dm.jdbc.driver.DmDriver  
conn=jdbc:dm://localhost:5236
user=BENCHMARKSQL  #数据库用户
password=123456789  #数据库用户密码

warehouses=10  #仓库数量
loadWorkers=4  #初始仓库中数据的并行数

terminals=10  #并发数(最大仓库数10倍)最好是与仓库数量一致
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0 #事务数模式(与runMins互斥)
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=5  #测试时间(分钟)
//Number of total transactions per minute
limitTxnsPerMin=0  #限制每分钟全局事务数(一般为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
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
~

4、压力测试

4.1 创建表空间、用户

创建压力测试所需的表空间、用户

#创建表空间 BENCHMARKSQL_DATA
CREATE TABLESPACE BENCHMARKSQL_DATA DATAFILE 'BENCHMARKSQL_DATA01.dbf' SIZE 1024;
ALTER TABLESPACE BENCHMARKSQL_DATA ADD DATAFILE 'BENCHMARKSQL_DATA02.dbf' SIZE 1024;
ALTER TABLESPACE BENCHMARKSQL_DATA ADD DATAFILE 'BENCHMARKSQL_DATA03.dbf' SIZE 1024;

#创建索引表空间
CREATE TABLESPACE BENCHMARKSQL_IDX DATAFILE 'BENCHMARKSQL_IDX01.dbf' SIZE 1024;
ALTER TABLESPACE BENCHMARKSQL_IDX ADD DATAFILE 'BENCHMARKSQL_IDX02.dbf' SIZE 1024;
ALTER TABLESPACE BENCHMARKSQL_IDX ADD DATAFILE 'BENCHMARKSQL_IDX03.dbf' SIZE 1024;


#创建用户
CREATE USER "BENCHMARKSQL" IDENTIFIED BY "123456789" DEFAULT TABLESPACE "BENCHMARKSQL_DATA" default index tablespace "BENCHMARKSQL_IDX";

#授权
GRANT DBA TO BENCHMARKSQL;

4.2 创建表 

在/opt/TPCC/benchmarksql-5.0/run/sql.common目录下有tableCreates.sql文件,创建相应的表

create table BENCHMARKSQL.bmsql_config (
  cfg_name    varchar(30) primary key,
  cfg_value   varchar(50)
);

create table BENCHMARKSQL.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)
);

create table BENCHMARKSQL.bmsql_district (
  d_w_id       integer       not null,
  d_id         integer       not null,
  d_ytd        decimal(12,2),
  d_tax        decimal(4,4),
  d_next_o_id  integer,
  d_name       varchar(10),
  d_street_1   varchar(20),
  d_street_2   varchar(20),
  d_city       varchar(20),
  d_state      char(2),
  d_zip        char(9)
);

create table BENCHMARKSQL.bmsql_customer (
  c_w_id         integer        not null,
  c_d_id         integer        not null,
  c_id           integer        not null,
  c_discount     decimal(4,4),
  c_credit       char(2),
  c_last         varchar(16),
  c_first        varchar(16),
  c_credit_lim   decimal(12,2),
  c_balance      decimal(12,2),
  c_ytd_payment  decimal(12,2),
  c_payment_cnt  integer,
  c_delivery_cnt integer,
  c_street_1     varchar(20),
  c_street_2     varchar(20),
  c_city         varchar(20),
  c_state        char(2),
  c_zip          char(9),
  c_phone        char(16),
  c_since        timestamp,
  c_middle       char(2),
  c_data         varchar(500)
);

create sequence BENCHMARKSQL.bmsql_hist_id_seq;

create table BENCHMARKSQL.bmsql_history (
  hist_id  integer,
  h_c_id   integer,
  h_c_d_id integer,
  h_c_w_id integer,
  h_d_id   integer,
  h_w_id   integer,
  h_date   timestamp,
  h_amount decimal(6,2),
  h_data   varchar(24)
);

create table BENCHMARKSQL.bmsql_new_order (
  no_w_id  integer   not null,
  no_d_id  integer   not null,
  no_o_id  integer   not null
);

create table BENCHMARKSQL.bmsql_oorder (
  o_w_id       integer      not null,
  o_d_id       integer      not null,
  o_id         integer      not null,
  o_c_id       integer,
  o_carrier_id integer,
  o_ol_cnt     integer,
  o_all_local  integer,
  o_entry_d    timestamp
);

create table BENCHMARKSQL.bmsql_order_line (
  ol_w_id         integer   not null,
  ol_d_id         integer   not null,
  ol_o_id         integer   not null,
  ol_number       integer   not null,
  ol_i_id         integer   not null,
  ol_delivery_d   timestamp,
  ol_amount       decimal(6,2),
  ol_supply_w_id  integer,
  ol_quantity     integer,
  ol_dist_info    char(24)
);

create table BENCHMARKSQL.bmsql_item (
  i_id     integer      not null,
  i_name   varchar(24),
  i_price  decimal(5,2),
  i_data   varchar(50),
  i_im_id  integer
);

create table BENCHMARKSQL.bmsql_stock (
  s_w_id       integer       not null,
  s_i_id       integer       not null,
  s_quantity   integer,
  s_ytd        integer,
  s_order_cnt  integer,
  s_remote_cnt integer,
  s_data       varchar(50),
  s_dist_01    char(24),
  s_dist_02    char(24),
  s_dist_03    char(24),
  s_dist_04    char(24),
  s_dist_05    char(24),
  s_dist_06    char(24),
  s_dist_07    char(24),
  s_dist_08    char(24),
  s_dist_09    char(24),
  s_dist_10    char(24)
);

4.3 装载数据

[root@DMDB01 run]# ./runLoader.sh props.dm numWarehouses 10
Starting BenchmarkSQL LoadData

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

Worker 000: Loading ITEM
Worker 001: Loading Warehouse      1
Worker 002: Loading Warehouse      2
Worker 003: Loading Warehouse      3
Worker 000: Loading ITEM done
Worker 000: Loading Warehouse      4
Worker 003: Loading Warehouse      3 done
Worker 003: Loading Warehouse      5
Worker 002: Loading Warehouse      2 done
Worker 002: Loading Warehouse      6
Worker 001: Loading Warehouse      1 done
Worker 001: Loading Warehouse      7
Worker 000: Loading Warehouse      4 done
Worker 000: Loading Warehouse      8
Worker 003: Loading Warehouse      5 done
Worker 003: Loading Warehouse      9
Worker 001: Loading Warehouse      7 done
Worker 001: Loading Warehouse     10
Worker 002: Loading Warehouse      6 done
Worker 000: Loading Warehouse      8 done
Worker 003: Loading Warehouse      9 done
Worker 001: Loading Warehouse     10 done

4.3 创建索引、约束

参照/opt/TPCC/benchmarksql-5.0/run/sql.common/indexCreates.sql

alter table BENCHMARKSQL.bmsql_warehouse add constraint bmsql_warehouse_pkey
  primary key (w_id);

alter table BENCHMARKSQL.bmsql_district add constraint bmsql_district_pkey
  primary key (d_w_id, d_id);

alter table BENCHMARKSQL.bmsql_customer add constraint bmsql_customer_pkey
  primary key (c_w_id, c_d_id, c_id);

create index bmsql_customer_idx1
  on  BENCHMARKSQL.bmsql_customer (c_w_id, c_d_id, c_last, c_first);

alter table BENCHMARKSQL.bmsql_oorder add constraint bmsql_oorder_pkey
  primary key (o_w_id, o_d_id, o_id);

create unique index bmsql_oorder_idx1
  on  BENCHMARKSQL.bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id);

alter table BENCHMARKSQL.bmsql_new_order add constraint bmsql_new_order_pkey
  primary key (no_w_id, no_d_id, no_o_id);

alter table BENCHMARKSQL.bmsql_order_line add constraint bmsql_order_line_pkey
  primary key (ol_w_id, ol_d_id, ol_o_id, ol_number);

alter table BENCHMARKSQL.bmsql_stock add constraint bmsql_stock_pkey
  primary key (s_w_id, s_i_id);

alter table BENCHMARKSQL.bmsql_item add constraint bmsql_item_pkey
  primary key (i_id);

4.4 收集统计信息

--收集指定用户下所有表所有列的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('BENCHMARKSQL',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

--收集指定用户下所有索引的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('BENCHMARKSQL',1.0,TRUE);

4.5 压测

[root@DMDB01 run]# ./runBenchmark.sh props.dm 
16:52:14,692 [main] INFO   jTPCC : Term-00, 
16:52:14,693 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:52:14,693 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
16:52:14,693 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:52:14,693 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa
16:52:14,693 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier
16:52:14,695 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck
16:52:14,695 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:52:14,695 [main] INFO   jTPCC : Term-00, 
16:52:14,695 [main] INFO   jTPCC : Term-00, db=dameng
16:52:14,695 [main] INFO   jTPCC : Term-00, driver=dm.jdbc.driver.DmDriver
16:52:14,695 [main] INFO   jTPCC : Term-00, conn=jdbc:dm://localhost:5236
16:52:14,695 [main] INFO   jTPCC : Term-00, user=BENCHMARKSQL
16:52:14,695 [main] INFO   jTPCC : Term-00, 
16:52:14,695 [main] INFO   jTPCC : Term-00, warehouses=10
16:52:14,696 [main] INFO   jTPCC : Term-00, terminals=10
16:52:14,696 [main] INFO   jTPCC : Term-00, runMins=5
16:52:14,696 [main] INFO   jTPCC : Term-00, limitTxnsPerMin=0
16:52:14,696 [main] INFO   jTPCC : Term-00, terminalWarehouseFixed=true
16:52:14,696 [main] INFO   jTPCC : Term-00, 
16:52:14,696 [main] INFO   jTPCC : Term-00, newOrderWeight=45
16:52:14,696 [main] INFO   jTPCC : Term-00, paymentWeight=43
16:52:14,696 [main] INFO   jTPCC : Term-00, orderStatusWeight=4
16:52:14,697 [main] INFO   jTPCC : Term-00, deliveryWeight=4
16:52:14,697 [main] INFO   jTPCC : Term-00, stockLevelWeight=4
16:52:14,697 [main] INFO   jTPCC : Term-00, 
16:52:14,697 [main] INFO   jTPCC : Term-00, resultDirectory=dameng_result_%tY-%tm-%td_%tH%tM%tS
16:52:14,697 [main] INFO   jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
16:52:14,697 [main] INFO   jTPCC : Term-00, 
16:52:14,709 [main] INFO   jTPCC : Term-00, copied props.dm to dameng_result_2024-09-11_165214/run.properties
16:52:14,709 [main] INFO   jTPCC : Term-00, created dameng_result_2024-09-11_165214/data/runInfo.csv for runID 6
16:52:14,709 [main] INFO   jTPCC : Term-00, writing per transaction results to dameng_result_2024-09-11_165214/data/result.csv
16:52:14,709 [main] INFO   jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
16:52:14,709 [main] INFO   jTPCC : Term-00, osCollectorInterval=1
16:52:14,709 [main] INFO   jTPCC : Term-00, osCollectorSSHAddr=null
16:52:14,709 [main] INFO   jTPCC : Term-00, osCollectorDevices=net_ens33 blk_sda
16:52:14,745 [main] INFO   jTPCC : Term-00,
16:52:14,860 [main] INFO   jTPCC : Term-00, C value for C_LAST during load: 30
16:52:14,860 [main] INFO   jTPCC : Term-00, C value for C_LAST this run:    144
16:52:14,860 [main] INFO   jTPCC : Term-00, 
Term-00, Running Average tpmTOTAL: 41883.08    Current tpmTOTAL: 1386072    Memory Usage: 35MB / 60MB          
16:57:15,067 [Thread-11] INFO   jTPCC : Term-00, 
16:57:15,069 [Thread-11] INFO   jTPCC : Term-00, 
16:57:15,069 [Thread-11] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 18858.98
16:57:15,069 [Thread-11] INFO   jTPCC : Term-00, Measured tpmTOTAL = 41869.13
16:57:15,069 [Thread-11] INFO   jTPCC : Term-00, Session Start     = 2024-09-11 16:52:14
16:57:15,069 [Thread-11] INFO   jTPCC : Term-00, Session End       = 2024-09-11 16:57:15
16:57:15,069 [Thread-11] INFO   jTPCC : Term-00, Transaction Count = 209427
[root@DMDB01 run]# 

测试结果

Measured tpmC (NewOrders) = 18858.98    #每分钟新订单数
Measured tpmTOTAL = 41869.13    #每分钟处理的总数
Session Start     = 2024-09-11 16:52:14
Session End       = 2024-09-11 16:57:15
Transaction Count = 209427     #5分钟处理的总数


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值