注册
【与达梦同行】达梦数据库dm8下的tpcc测试
技术分享/ 文章详情 /

【与达梦同行】达梦数据库dm8下的tpcc测试

亨利 2022/12/12 2918 2 1

导读

读者可以从本文有以下收获

  • 从本文获得创建普通用户的方法过程
  • 创建tpcc表注意什么
  • 针对dm8的benchmarksql工具包的下载
  • tpcc的测试过程

tpcc测试是什么

BenchmarkSQL是对OLTP数据库主流测试标准TPC-C的开源实现。目前最新版本为V5.0,该版本支持Firebird,Oracle和PostgreSQL数据库,测试结果详细信息存储在CSV文件中,并可以将结果转换为HTML报告。

创建用户表空间,并进行授权

sysdba的身份登录dm8

SQL> CREATE TABLESPACE BENCHMARKSQL_TABLESPACE  DATAFILE 'BENCHMARKSQL1.dbf' SIZE 5000;

executed successfully
used time: 78.347(ms). Execute id is 58401.
SQL> SQL> CREATE USER   HENLEY  IDENTIFIED BY "Dameng12345" DEFAULT TABLESPACE "BENCHMARKSQL_TABLESPACE";
executed successfully
used time: 14.412(ms). Execute id is 58402.
SQL> GRANT DBA TO HENLEY;
executed successfully
used time: 8.557(ms). Execute id is 58403.

DM 提供三种方式方法供用户指定棸集索引,这里主动人为建表,并且用的是 cluster primary key
1、cluster primary key
2、Cluster key
3、Cluster unique key

DM8 提供的索引:
1、聚集索引:每一个普通表有且只有一个聚集索引
2、唯一索引:唯一索引可以保证表上不会有两行数据具有相同的值。
3、函数索引:包含函数表达式的预先计算的值
4、位图索引:列上的值的类型少
5、复合索引:表中两个或两个以上的列一起建立索引
6、全文索引:在表中文本列上建索引。

笔者看了前人的测试建表都是采用了cluster primary key 的方式 ,除了这个还有堆树,至于哪个是最优,实践出真知,笔者这里采用了cluster primary key,因为它是聚集,IO更集中一点。

官方文档 堆表的介绍

采用了物理 ROWID 形式的堆表,DM 服务器内部对聚集索引进行了调整,没有采用传统B 树结构,取而代之的是“扁平 B 树”,数据页都是通过链表形式存储。为支持并发插入,扁平 B 树可以支持最多 128 个数据页链表(最多 64 个并发分支和最多 64 个非并发分支),在 B 树的控制页中记录了所有链表的首、尾页地址。

对于非并发分支,如果分支数有多个,即存在多个链表,则不同的用户登录系统之后,会依据其事务 ID 号,随机选择一条链表来对堆表进行插入操作。

对于并发分支,则不同用户会选择不同的分支来进行插入,如果存在多个用户选择了同一条分支的情况,才需要等待其他用户插入结束并释放锁之后才能进行插入。在并发情况下,不同用户可以在不同的链表上进行插入,效率得到较大提升。

SQL 建表语句指定 创建表时可以在 STORAGE 选项中指定需要创建的表形式, 与堆表创建形式相关的关键字有三个,分别是 NO BRANCH、BRANCH、CLUSTERBTR。

NOBRANCH:如果指定为 NOBRANCH,则创建的表为堆表,并发分支个数为 0,非并发分支个数为 1;

BRANCH(n,m):如果为该形式,则创建的表为堆表,并发分支个数为 n,非并发个数为 m;

BRANCH n:指定创建的表为堆表,并发分支个数为 n,非并发分支个数为 0;

CLUSTERBTR:创建的表为索引组织表。

以henley的用户身份登录dm8

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    float,

w_tax    float,

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),

cluster primary key (w_id)

)storage(fillfactor 2,without counter);





create table bmsql_district (

d_w_id    integer    not null,

d_id     integer    not null,

d_ytd    float,

d_tax    float,

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),

cluster primary key (d_w_id, d_id)

)

storage(fillfactor 3,without counter);

create table bmsql_customer (

c_w_id     integer    not null,

c_d_id     integer    not null,

c_id      integer    not null,

c_discount   float,

c_credit    char(2),

c_last     varchar(16),

c_first    varchar(16),

c_credit_lim  float,

c_balance    float,

c_ytd_payment float,

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),

cluster primary key (c_w_id, c_d_id, c_id)

)

storage(without counter);

create sequence bmsql_hist_id_seq;

create table 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 float,

h_data  varchar(24)

)

storage(branch(16,16),without counter);

create table bmsql_new_order (

no_w_id integer  not null,

no_d_id integer  not null,

no_o_id integer  not null,

cluster primary key (no_w_id, no_d_id, no_o_id)

)

storage(without counter);

create table 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   float,

o_all_local float,

o_entry_d  timestamp,

cluster primary key (o_w_id, o_d_id, o_id)

)

storage(without counter);

create table 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    float,

ol_supply_w_id integer,

ol_quantity   float,

ol_dist_info  char(24),

cluster primary key (ol_w_id, ol_d_id, ol_o_id, ol_number)

)

storage(without counter);

create table bmsql_item (

i_id   integer   not null,

i_name  varchar(24),

i_price float,

i_data  varchar(50),

i_im_id integer,

cluster primary key (i_id)

)

storage(without counter);

create table bmsql_stock (

s_w_id    integer    not null,

s_i_id    integer    not null,

s_quantity  float,

s_ytd    float,

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),

cluster primary key (s_i_id, s_w_id)

)

storage(without counter);


下载bechmark工具

benchmark程序默认不支持dm,程序必须更改,这里百度链接有在达梦的个性化编译版,直接下载百度盘的使用就行。这样不需要引入jar包,不需要重新编译,不需要修源代码等繁琐操作。

链接:https://pan.baidu.com/s/1vWZZCNYfTYp7YLPrJa6ZZw
提取码:nnx5

下载定制版的benchmarksql工具包,解压,直奔run目录,先授权再修改props.dm配置文件

[root@hdp1 run]# chmod  -R   +x  ./*  

修改配置文件,其中warehouses代表数据量,loadWorkers代表并发访问线程

[root@hdp1 run]# cat props.dm 
db=dm
driver=dm.jdbc.driver.DmDriver
conn=jdbc:dm://XX.XX.XX.XX:5236
user=henley2
password=Dameng12345

warehouses=2
loadWorkers=2

执行数据装载工具

./runLoader.sh props.dm


创建索引

./runSQL.sh props.dm indexCreates

执行测试

[root@hdp1 run]# ./runBenchmark.sh   ./props.dm 
16:11:18,904 [main] INFO   jTPCC : Term-00, 
16:11:18,910 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:11:18,911 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0rc2
16:11:18,911 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:11:18,911 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa
16:11:18,911 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier
16:11:18,914 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck
16:11:18,914 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
16:11:18,914 [main] INFO   jTPCC : Term-00, 
16:11:18,914 [main] INFO   jTPCC : Term-00, db=dm
16:11:18,914 [main] INFO   jTPCC : Term-00, driver=dm.jdbc.driver.DmDriver
16:11:18,914 [main] INFO   jTPCC : Term-00, conn=jdbc:dm://192.168.30.143:5236
16:11:18,914 [main] INFO   jTPCC : Term-00, user=henley2

清空数据

./runSQL.sh props.dm indexDrops
./runSQL.sh props.dm tableTruncates
./runSQL.sh props.dm tableDrops


查看数据结果

[root@hdp1 run]# ll  my_result_2022-12-12_161118/data/
total 3708
-rw-r--r--. 1 root root   27384 Dec 12 16:21 blk_sda.csv
-rw-r--r--. 1 root root   31241 Dec 12 16:21 net_eth0.csv
-rw-r--r--. 1 root root 3651770 Dec 12 16:21 result.csv
-rw-r--r--. 1 root root     212 Dec 12 16:11 runInfo.csv
-rw-r--r--. 1 root root   76639 Dec 12 16:21 sys_info.csv
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服