读者可以从本文有以下收获
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);
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
文章
阅读量
获赞