達夢TPCC BENCHMARKSQL性能測試


測試模型
TPC-C測試用到的模型是一個大型的商品批發銷售公司,它擁有若干個分布在不同區域的商品倉庫。當業務擴展的時候,公司將添加新的倉庫。每個倉庫負責為10個銷售點供貨,其中每個銷售點為3000個客戶提供服務,每個客戶提交的訂單中,平均每個訂單有10項產品,所有訂單中約1%的產品在其直接所屬的倉庫中沒有存貨,必須由其他區域的倉庫來供貨。同時,每個倉庫都要維護公司銷售的100000種商品的庫存記錄。
測試指標
TPC-C測試的結果主要有兩個指標,即流量指標(Throughput,簡稱tpmC)和性價比(Price/Performance,簡稱Price/tpmC)。
流量指標(Throughput,簡稱tpmC):按照TPC組織的定義,流量指標描述了系統在執行支付操作、訂單狀態查詢、發貨和庫存狀態查詢這4種交易的同時,每分鍾可以處理多少個新訂單交易。所有交易的響應時間必須滿足TPC-C測試規范的要求,且各種交易數量所占的比例也應該滿足TPC-C測試規范的要求。在這種情況下,流量指標值越大說明系統的聯機事務處理能力越高。
性價比(Price/Performance,簡稱Price/tpmc):即測試系統的整體價格與流量指標的比值,在獲得相同的tpmC值的情況下,價格越低越好。
 
環境准備
詳細信息
數據版本
dm8
jdk版本
jdk1.8.0_242
apache-ant版本
1.10.10
benchmarkSQL版本
benchmarksql-5.0
cpu
32核 x86
內存
64G
操作系統
centos7.8
實例掛載磁盤大小
500G
 
初始化數據庫
./dminit path=/dmdata page_size=32
上傳安裝包到/tpcc下
1 安裝jdk並配置環境變量
解壓jdk
tar -zxvf jdk-8u271-linux-x64.tar.gz
編輯/etc/profile文件,在文件末尾添加一下內容
export JAVA_HOME=/tpcc/jdk1.8.0_271
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
執行命令source /etc/profile 生效
執行命令java -version或jps環境變量是否生效
2 apache-ant 安裝和配置環境變量
官網下載apache-ant     https://ant.apache.org/bindownload.cgi
解壓apache-ant
unzip apache-ant-1.10.10-bin.zip
vim ~/.bash_profile
export APACH_HOME=/tpcc/apache-ant-1.10.10
export PATH=$PATH:$APACH_HOME/bin
執行命令source ~/.bash_profile生效
執行命令ant -version 查看是否生效
3 benchmarksql安裝和配置
官網下載BenchmarkSQL    https://sourceforge.net/projects/benchmarksql/
解壓安裝包
unzip benchmarksql-5.0\(2\).zip
官方版本默認不支持達夢數據庫,需要修改源碼
vim /tpcc/benchmarksql-5.0/src/client/jTPCC.java 添加如下內容
vim /tpcc/benchmarksql-5.0/run/funcs.sh 修改如下
 
在benchmarksql的lib庫中添加dameng目錄,放置driver包
cp /dm8/drivers/jdbc/DmJdbcDriver18.jar /tpcc/benchmarksql-5.0/lib/dameng
在benchmarksql-5.0 目錄使用ant命令編譯源碼
在benchmarksql的run目錄編輯props.dm
db=dameng
driver=dm.jdbc.driver.DmDriver
user=BENCHMARKSQL
password=123456789
warehouses=100
terminals=144
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=5
//Number of total transactions per minute
limitTxnsPerMin=0
//The following five values must add up to 100
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
創建測試用戶及授權
CREATE TABLESPACE BENCHMARKSQL1 DATAFILE 'BENCHMARKSQL1.dbf' SIZE 10000;
CREATE USER "BENCHMARKSQL" IDENTIFIED BY "123456789" DEFAULT TABLESPACE "BENCHMARKSQL1";
GRANT DBA TO BENCHMARKSQL;
創建表
create table benchmarksql.bmsql_config (
  cfg_name    varchar(30) cluster primary key,
  cfg_value   varchar(50)
);
create table benchmarksql.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 1);
create table benchmarksql.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 1);
create table benchmarksql.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)
);
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 float,
  h_data   varchar(24)
)storage(branch(32,32),without counter);
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     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 benchmarksql.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 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       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 benchmarksql.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_w_id, s_i_id)
);
create table benchmarksql.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)
);
裝載數據
運行以下命令裝載 100 個倉庫數據
./runLoader.sh props.dm numWarehouses 100
 
創建索引和序列
create index ndx_customer_name on benchmarksql.bmsql_customer (c_w_id, c_d_id, c_last, c_first);
create or replace procedure benchmarksql.createsequence
as
n int;
stmt1 varchar(200);
begin
   select count(*)+1 into n from benchmarksql.bmsql_history;
   if(n != 1) then
      select max(hist_id) + 1 into n from benchmarksql.bmsql_history;
   end if;
   PRINT n;
   stmt1:='create sequence benchmarksql.bmsql_hist_id_seq start with '||n||' MAXVALUE 9223372036854775807 CACHE 50000;';
   EXECUTE IMMEDIATE stmt1;
end;
/
call benchmarksql.createsequence;
alter table benchmarksql.bmsql_history modify hist_id integer default (benchmarksql.bmsql_hist_id_seq.nextval);
 
修改dm.ini動態參數(sql腳本)
修改靜態參數
CKPT_FLUSH_PAGES = 0
FAST_RW_LOCK=2
ENABLE_MONITOR = 0
FIRST_ROWS=16
重啟數據庫服務
systemctl restart DmServiceDM.service
數據預加載
擴庫以及日志文件、優化表
alter tablespace "ROLL" resize datafile 'ROLL.DBF' to 10000;
alter database resize logfile 'DAMENG01.log' to 50000;
alter database resize logfile 'DAMENG02.log' to 50000;
--測試前執行如下SQL:
--item表,8K的頁,需要占用1300頁
SP_SET_TAB_FAST_POOL_FLAG('BENCHMARKSQL', 'BMSQL_ITEM', 1);
SP_SET_TAB_FAST_POOL_FLAG('BENCHMARKSQL', 'BMSQL_WAREHOUSE', 1);
SP_SET_TAB_FAST_POOL_FLAG('BENCHMARKSQL', 'BMSQL_DISTRICT', 1);
如果是壓力測試(數據都可以在內存放下),可以執行下面的語句,把數據預加載到內存:
select count(*) from "BENCHMARKSQL"."BMSQL_CUSTOMER" union all
select count(*) from "BENCHMARKSQL"."BMSQL_DISTRICT" union all
select count(*) from "BENCHMARKSQL"."BMSQL_ITEM" union all
select count(*) from "BENCHMARKSQL"."BMSQL_NEW_ORDER" union all
select count(*) from "BENCHMARKSQL"."BMSQL_OORDER" union all
select count(*) from "BENCHMARKSQL"."BMSQL_ORDER_LINE" union all
select count(*) from "BENCHMARKSQL"."BMSQL_STOCK" union all
select count(*) from "BENCHMARKSQL"."BMSQL_WAREHOUSE" union all
select count(*) from "BENCHMARKSQL"."BMSQL_HISTORY"  union all
select count("C_PAYMENT_CNT") from "BENCHMARKSQL"."BMSQL_CUSTOMER";
執行測試
./runBenchmark.sh props.dm

測試后清除數據

./runDatabaseDestroy.sh props.dm

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM