BenchmarkSQL TPC-C OLTP 資料庫效能測試工具
BenchmarkSQL 是個開源測試資料庫 OLTP 效能工具,採用 TPC-C 的測試標準,
透過 JDBC 的方式連到資料庫,支援 PostgreSQL、EnterpriseDB、Oracle、DB2、SQL Server、MySQL
標案下載位置 : https://sourceforge.net/projects/benchmarksql/
完整安裝介紹:https://www.jianshu.com/p/5a056102c8b8
安裝過程就不介紹了,筆者是用來測試 Greemplum 的 OLTP 能力 (os: 想也知道效能很差,但是上面給的研究,不得不做這麼奇怪的測試…唉…)
以下只記錄需要修改注意的地方
1. PostgreSQL JDBC Driver
因安裝包裡面已含有 Postgres JDBC Driver 版本為 postgresql-9.3-1102.jdbc41.jar,不過這裡我是去 PostgreSQL Driver 官網下載比較新的點的 Driver ( 筆者當時下載是 postgresql-42.2.5.jre7.jar )
2. tableCreate.sql
/benchmarksql-5.0/run/sql.common/tableCreates.sql 本身沒有問題,不過內容比較適用於 PostgreSQL、Oracle 等非分割資料使用的資料庫,而 Greenplum 因為在建立 Table 時,若沒有定義資料切割的欄位 ( DISTRIBUTED BY ),預設會拿第一個欄位來分割資料,那模擬時的資料「可能」分佈就會不均,因此就稍微修改成以下SQL內容,而原本 tableCreates.sql 需要修改檔名
create table bmsql_config (
  cfg_name    varchar(30) primary key,
  cfg_value   varchar(50)
)
DISTRIBUTED BY (cfg_name);
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)
)
DISTRIBUTED BY (w_id);
create table 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)
)
DISTRIBUTED BY (d_w_id, d_id);
create table 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)
)
DISTRIBUTED BY (c_w_id, c_d_id, c_id);
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 decimal(6,2),
  h_data   varchar(24)
)
DISTRIBUTED BY (h_c_w_id, h_c_d_id, h_c_id, h_w_id, h_d_id);
create table bmsql_new_order (
  no_w_id  integer   not null,
  no_d_id  integer   not null,
  no_o_id  integer   not null
)
DISTRIBUTED BY (no_w_id, no_d_id, no_o_id);
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     integer,
  o_all_local  integer,
  o_entry_d    timestamp
)
DISTRIBUTED BY (o_w_id, o_d_id, o_id);
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       decimal(6,2),
  ol_supply_w_id  integer,
  ol_quantity     integer,
  ol_dist_info    char(24)
)
DISTRIBUTED BY (ol_w_id, ol_d_id, ol_o_id, ol_number);
create table bmsql_item (
  i_id     integer      not null,
  i_name   varchar(24),
  i_price  decimal(5,2),
  i_data   varchar(50),
  i_im_id  integer
)
DISTRIBUTED BY (i_id);
create table 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)
)
DISTRIBUTED BY (s_w_id, s_i_id);
3. 修改 set myCP
在 runSQL.sh、runLoader.sh、runBenchmark.sh 裡面,把有出現 setCP || exit 1 都註解掉,並在下面加入以下的內容
#setCP || exit 1
runBenchmark.sh
myCP=".:../lib/postgres/postgresql-42.2.5.jre7.jar:../lib/apache-log4j-extras-1.1.jar:../lib/log4j-1.2.17.jar:../dist/BenchmarkSQL-5.0.jar"
runLoader.sh
myCP=".:../lib/postgres/postgresql-42.2.5.jre7.jar:../lib/apache-log4j-extras-1.1.jar:../dist/BenchmarkSQL-5.0.jar"
runSQL.sh
myCP="../lib/postgres/postgresql-42.2.5.jre7.jar:../dist/BenchmarkSQL-5.0.jar"
4. 安裝 R ( redhat 6 )
特別寫這個,如果是 redhat 6 要安裝 R,需要先安裝 epel-release,將 texinfo-tex、libicu-devel 都更新後,再來安裝 R,至於 redhat 7是不是能直接安裝 R,這點就沒研究測試,安裝方法大同小異
rpm -ivh https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install texinfo-tex
yum install libicu-devel
yum install R
相關參考連接:
TPC 組織官網 http://www.tpc.org/default.asp
Benchmarksql基于PostgreSQL安装与使用 https://www.jianshu.com/p/5a056102c8b8
PostgreSQL JDBC Driver 官網 https://jdbc.postgresql.org
BenchmarkSQL的安裝和使用指導書 https://www.itread01.com/content/1541074627.html
已轉向 blogger 記錄
https://slowlife-notes.blogspot.com