Shentong-tpcc - 知识库

Shentong-tpcc 编辑

Benchmarksql的使用方法

本文以神通数据库为例,介绍一下benchmarksql的使用方法。

原料

神通数据库、benchmarksql-4.1.1,可以在ftp上下载

  • Benchmark-4.1.1

/wiki/loongnix/ftp://10.40.23.7/Release/05_TOOLS/02_test_tools/TPCC_linux/

其中有两个文件,一个4MB一个7MB,都可以用。

  • 神通数据库:

/wiki/loongnix/ftp://10.40.23.7/Release/06_SOFTWARE/Database/ShenTong/Loongson/

1. 安装数据库

  • 截止到本文撰写,神通提供的版本是2071130的版本。进入ShenTong7.0_20171130_05_pack20180104_Loongson64目录,执行./setup.sh。
  • 安装完毕后会建立数据库默认建立,名字默认是OSRDB;数据库50G、log文件20G。

2. 配置数据库

  • 打开终端
$ cd /opt/ShenTong/bin
$ ./isql  OSRDB

Welcome to isql 7.1.20180104 the ShenTongDB interactive terminal.
Type:  COPYRIGHT for distribution terms
       HELP for help with SQL commands
       ? for help on internal commands
       ! to run system commands
       EXIT to quit
SQL> 
  • “SQL>”就是数据库的命令提示符,后面的配置需要在这个提示符内进行。
  • 设置参数
set ENABLE_NORMAL_NOLOGGING=false

3. 创建表空间和用户

create tablespace benchmarksql_data 
datafile '/opt/ShenTongTPCC/odbs/TPCC/benchmarksql_data.dbf' size 2g autoextend on next 200m;
create tablespace benchmarksql_index 
datafile '/opt/ShenTongTPCC/odbs/TPCC/benchmarksql_index.dbf' size 1g autoextend on next 200m;
set min_password_len=0;
create user benchmarksql password 'benchmarksql' default tablespace benchmarksql_data role sysdba;

注意:这一步有可能会出错,报返回错误13;意思是不能建立用户空间,如果碰到这种情况,请跳到d)节;

该节将创建表空间和用户、创建表、创建索引进行了更改,方法其实和本节提到的差不多,就是使用的是默认用户和表空间,其余的操作和本节的方式一样,流程请务必按照本节的方式进行!!


4. 创建表

create table benchmarksql.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)
) nologging  tablespace benchmarksql_data   pctfree 99 pctused 0  INITRANS 16;
commit;

create table benchmarksql.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)
) nologging tablespace benchmarksql_data pctfree 88 pctused 10 INITRANS 16;
commit;


create table benchmarksql.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  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)
)  tablespace benchmarksql_data INIT 3500M NEXT 200M  nologging ;

create sequence benchmarksql.hist_id_seq;
ALTER SEQUENCE  BENCHMARKSQL.HIST_ID_SEQ CACHE 100;
create table benchmarksql.history (
  hist_id int not null default nextval('BENCHMARKSQL.HIST_ID_SEQ') primary key,
  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)
) tablespace benchmarksql_data init 700m next 100m nologging;


create table benchmarksql.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     decimal(2,0),
  o_all_local  decimal(1,0),
  o_entry_d    timestamp
) tablespace benchmarksql_data init 500m next 100m nologging;


create table benchmarksql.new_order (
  no_w_id  integer   not null,
  no_d_id  integer   not null,
  no_o_id  integer   not null
) tablespace benchmarksql_data init 60m nologging;


create table benchmarksql.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     decimal(2,0),
  ol_dist_info    char(24)
) tablespace benchmarksql_data init 7g next 200m nologging;

create table benchmarksql.stock (
  s_w_id       integer       not null,
  s_i_id       integer       not null,
  s_quantity   decimal(4,0),
  s_ytd        decimal(8,2),
  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)
) tablespace benchmarksql_data init 7g next 200m nologging;


create table benchmarksql.item (
  i_id     integer      not null,
  i_name   varchar(24),
  i_price  decimal(5,2),
  i_data   varchar(50),
  i_im_id  integer
) tablespace benchmarksql_data;

5. 检查已经创建的表

  • 创建完毕后可以使用list table查看,一共是9个表,见图2
SQL> list table
     schema    |    name    | type  |    owner     
--------------+------------+-------+--------------
 BENCHMARKSQL | CUSTOMER   | table | BENCHMARKSQL
 BENCHMARKSQL | DISTRICT   | table | BENCHMARKSQL
 BENCHMARKSQL | HISTORY    | table | BENCHMARKSQL
 BENCHMARKSQL | ITEM       | table | BENCHMARKSQL
 BENCHMARKSQL | NEW_ORDER  | table | BENCHMARKSQL
 BENCHMARKSQL | OORDER     | table | BENCHMARKSQL
 BENCHMARKSQL | ORDER_LINE | table | BENCHMARKSQL
 BENCHMARKSQL | STOCK      | table | BENCHMARKSQL
 BENCHMARKSQL | WAREHOUSE  | table | BENCHMARKSQL

6. 装载数据

  • 下载的bencharksql-4.4.1.zip,解压后,进入run文件夹
# cd /opt/benchmarksql-4.1.1/run/
  • 编辑props.oscar,修改driver、conn、user、password域
driver=com.oscar.Driver
conn=jdbc:oscar://localhost:2003/OSRDB
user=benchmarksql
password=benchmarksql
  • 保存后退出,执行装载数据命令:
# sh runLoader.sh props.oscar numWarehouses 100

创建时间较长,请耐心等待。

7. 创建索引

还是执行isql OSRDB进入数据库命令行。

SET SORT_MEM=4096000;
alter table benchmarksql.warehouse add constraint pk_warehouse 
primary key (w_id) using index  tablespace benchmarksql_index;  
alter table benchmarksql.district add constraint pk_district 
primary key (d_w_id, d_id) using index tablespace benchmarksql_index;
alter table benchmarksql.customer add constraint pk_customer 
primary key (c_w_id, c_d_id, c_id) using index tablespace benchmarksql_index;
alter table benchmarksql.oorder add constraint pk_oorder 
primary key (o_w_id, o_d_id, o_id) using index tablespace benchmarksql_index;
alter table benchmarksql.new_order add constraint pk_new_order 
primary key (no_w_id, no_d_id, no_o_id) using index tablespace benchmarksql_index;
create index pk_order_line on benchmarksql.order_line (ol_w_id, ol_d_id, ol_o_id) tablespace benchmarksql_index;

alter table benchmarksql.stock add constraint pk_stock
primary key (s_w_id, s_i_id) using index tablespace benchmarksql_index;

alter table benchmarksql.item add constraint pk_item
primary key (i_id) using index tablespace benchmarksql_index;
select setval('BENCHMARKSQL.HIST_ID_SEQ', (select max(hist_id) + 1 from benchmarksql.history));

8. 设置表格式

alter table benchmarksql.warehouse logging;
alter table benchmarksql.district logging;
alter table benchmarksql.customer logging;
alter table benchmarksql.history logging;
alter table benchmarksql.oorder logging;
alter table benchmarksql.new_order logging;
alter table benchmarksql.order_line logging;
alter table benchmarksql.stock logging;

9. 停止数据库

# /etc/init.d/oscardb_OSRDBd stop

10. 修改数据库参数

编辑 /opt/ShenTong/admin/OSRDB.conf ,添加如下参数:

BUF_DATA_BUFFER_PAGES=3200000
SORT_MEM=4096000
ENABLE_NORMAL_NOLOGGING=false
LOG_COMPRESS_ENABLED=FALSE
ENABLE_RUNTIME_DIAG=FALSE
ENABLE_SQL_STAT=FALSE
LOADBUFFERLEVEL=2

11. 备份数据库

  • 将/opt/ShenTong/文件夹打包后拷贝到安全位置,这里推荐用pigz压缩,pigz是多线程压缩工具。使用前需要安装pigz。
  • 压缩命令:
tar -cf - mydir | pigz >mydir.tgz
  • 解压命令:
tar -I pigz -xf mydir.tgz -C /path/

12. 启动数据库

# /etc/init.d/oscardb_OSRDBd start

运行测试

  • 修改log配置文件

进入benchark-4.1.1/run/,编辑log4j.xml,添加如下配置:

<root>
<priority value="INFO"/>
<appender-ref ref="console"/>
<appender-ref ref="R"/>
<appender-ref ref="E"/>
</root>
  • 同样的目录下修改props.oscar,修改runMins域,修改为60:
runMins=60
  • 开始测试

在benchark-4.1.1/run/目录下执行测试脚本开始测试:

# sh runBenchmark.sh props.oscar

注意事项

在运行这个测试以后,会将数据库内部数据进行重新读写,导致数据顺序有更改的情况;

如果还需要再测试,建议将/opt/ShenTong文件夹删除,并将之前备份过的ShenTong.tgz解压到/opt/下,删除、解压之前将数据库停止,解压完毕后再打开数据库。