1 服务器规划:
服务器一台
|
名称 |
说明 |
|
操作系统 |
CentOS Linux release 7.8.2003 |
|
处理器 |
4 v |
|
内存 |
12 g |
|
硬盘 |
80 g |
2. 下载 benchmarksql-5.0 , jdk
https://sourceforge.net/projects/benchmarksql/files/latest/download
上传 benchmarksql-5.0 和 jdk 到主机
解压jdk并配置环境变量
在主机上使用 ant 编译 benchmarksql-5.0
修改 benchmarksql-5.0/src/client/jTPCC.java
增加 mysql 相关部分,如下所示
if (iDB.equals("firebird"))
dbType = DB_FIREBIRD;
else if (iDB.equals("oracle"))
dbType = DB_ORACLE;
else if (iDB.equals("postgres"))
dbType = DB_POSTGRES;
else if (iDB.equals("mysql"))
dbType = DB_UNKNOWN;
else
{
log.error("unknown database type '" + iDB + "'");
return;
}
修改 benchmarksql-5.0/src/client/jTPCCConnection.java
SQL 子查询增加 ”AS L” 别名,如下所示:
default:
stmtStockLevelSelectLow = dbConn.prepareStatement(
"SELECT count(*) AS low_stock FROM (" +
" SELECT s_w_id, s_i_id, s_quantity " +
" FROM bmsql_stock " +
" WHERE s_w_id = ? AND s_quantity < ? AND s_i_id IN (" +
" SELECT ol_i_id " +
" FROM bmsql_district " +
" JOIN bmsql_order_line ON ol_w_id = d_w_id " +
" AND ol_d_id = d_id " +
" AND ol_o_id >= d_next_o_id - 20 " +
" AND ol_o_id < d_next_o_id " +
" WHERE d_w_id = ? AND d_id = ? " +
" ) " +
" )AS L");
break;
执行编译: ant
修改以下配置使 b enchmarksql-5.0 支持 mysql :
修改 funcs.sh
cd benchmarksql-5.0/run
function setCP()
{
case "$(getProp db)" in
firebird)
cp="../lib/firebird/*:../lib/*"
;;
oracle)
cp="../lib/oracle/*"
if [ ! -z "${ORACLE_HOME}" -a -d ${ORACLE_HOME}/lib ] ; then
cp="${cp}:${ORACLE_HOME}/lib/*"
fi
cp="${cp}:../lib/*"
;;
postgres)
cp="../lib/postgres/*:../lib/*"
;;
mysql)
cp="../lib/mysql/*:../lib/*"
;;
esac
myCP=".:${cp}:../dist/*"
export myCP
}
# ----
# Make sure that the properties file does have db= and the value
# is a database, we support.
# ----
case "$(getProp db)" in
firebird|oracle|postgres| mysql)
;;
"") echo "ERROR: missing db= config option in ${PROPS}" >&2
exit 1
;;
*) echo "ERROR: unsupported database type 'db=$(getProp db)' in ${PROPS}" >&2
exit 1
;;
esac
修改: runDatabaseBuild.sh
BEFORE_LOAD="tableCreates"
AFTER_LOAD="indexCreates foreignKeys buildFinish"
修改配置文件 props.ob ( 在 run 目录下 )
db=mysql
driver=com.alipay.oceanbase.jdbc.Driver
conn=jdbc:oceanbase://127.0.0.1:2883/tpccdb
user=tpcc@obmysql
password=tpcc
warehouses=1
loadWorkers=4
terminals=1
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
runMins=10
//Number of total transactions per minute
limitTxnsPerMin=0
//Set to true to run in 4.x compatible mode. Set to false to use the
//entire configured database evenly.
terminalWarehouseFixed=true
//The following five values must add up to 100
//The default percentages of 45, 43, 4, 4 & 4 match the TPC-C spec
newOrderWeight=45
paymentWeight=43
orderStatusWeight=4
deliveryWeight=4
stockLevelWeight=4
// Directory name to create for collecting detailed result data.
// Comment this out to suppress.
resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
osCollectorScript=./misc/os_collector_linux.py
osCollectorInterval=1
//osCollectorSSHAddr=user@dbhost
osCollectorDevices=net_ens33 blk_sda
配置环境jdk环境变量上传oceanbase jar包lib/mysql 下
3. 构建表,并加载数据
[admin@bb4a923622b8 run]$ ./runDatabaseBuild.sh props.ob
[admin@zytob02 run]$ ./runDatabaseBuild.sh props.ob
# ------------------------------------------------------------
# Loading SQL file ./sql.common/tableCreates.sql
# ------------------------------------------------------------
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 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)
);
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)
);
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)
);
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)
);
create table bmsql_new_order (
no_w_id integer not null,
no_d_id integer not null,
no_o_id integer not null
);
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
);
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)
);
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
);
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)
);
Starting BenchmarkSQL LoadData
driver=com.alipay.oceanbase.jdbc.Driver
conn=jdbc:oceanbase://192.168.163.113:2883/test
user=root@obmysql
password=***********
warehouses=1
loadWorkers=4
fileLocation (not defined)
csvNullValue (not defined - using default 'NULL')
Worker 000: Loading ITEM
Worker 001: Loading Warehouse 1
Worker 000: Loading ITEM done
Worker 001: Loading Warehouse 1 done
# ------------------------------------------------------------
# Loading SQL file ./sql.common/indexCreates.sql
# ------------------------------------------------------------
alter table bmsql_warehouse add constraint bmsql_warehouse_pkey
primary key (w_id);
alter table bmsql_district add constraint bmsql_district_pkey
primary key (d_w_id, d_id);
alter table bmsql_customer add constraint bmsql_customer_pkey
primary key (c_w_id, c_d_id, c_id);
create index bmsql_customer_idx1
on bmsql_customer (c_w_id, c_d_id, c_last, c_first);
alter table bmsql_oorder add constraint bmsql_oorder_pkey
primary key (o_w_id, o_d_id, o_id);
create unique index bmsql_oorder_idx1
on bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id);
alter table bmsql_new_order add constraint bmsql_new_order_pkey
primary key (no_w_id, no_d_id, no_o_id);
alter table bmsql_order_line add constraint bmsql_order_line_pkey
primary key (ol_w_id, ol_d_id, ol_o_id, ol_number);
alter table bmsql_stock add constraint bmsql_stock_pkey
primary key (s_w_id, s_i_id);
alter table bmsql_item add constraint bmsql_item_pkey
primary key (i_id);
# ------------------------------------------------------------
# Loading SQL file ./sql.common/foreignKeys.sql
# ------------------------------------------------------------
alter table bmsql_district add constraint d_warehouse_fkey
foreign key (d_w_id)
references bmsql_warehouse (w_id);
alter table bmsql_customer add constraint c_district_fkey
foreign key (c_w_id, c_d_id)
references bmsql_district (d_w_id, d_id);
alter table bmsql_history add constraint h_customer_fkey
foreign key (h_c_w_id, h_c_d_id, h_c_id)
references bmsql_customer (c_w_id, c_d_id, c_id);
alter table bmsql_history add constraint h_district_fkey
foreign key (h_w_id, h_d_id)
references bmsql_district (d_w_id, d_id);
alter table bmsql_new_order add constraint no_order_fkey
foreign key (no_w_id, no_d_id, no_o_id)
references bmsql_oorder (o_w_id, o_d_id, o_id);
alter table bmsql_oorder add constraint o_customer_fkey
foreign key (o_w_id, o_d_id, o_c_id)
references bmsql_customer (c_w_id, c_d_id, c_id);
alter table bmsql_order_line add constraint ol_order_fkey
foreign key (ol_w_id, ol_d_id, ol_o_id)
references bmsql_oorder (o_w_id, o_d_id, o_id);
alter table bmsql_order_line add constraint ol_stock_fkey
foreign key (ol_supply_w_id, ol_i_id)
references bmsql_stock (s_w_id, s_i_id);
alter table bmsql_stock add constraint s_warehouse_fkey
foreign key (s_w_id)
references bmsql_warehouse (w_id);
alter table bmsql_stock add constraint s_item_fkey
foreign key (s_i_id)
references bmsql_item (i_id);
# ------------------------------------------------------------
# Loading SQL file ./sql.common/buildFinish.sql
# ------------------------------------------------------------
-- ----
-- Extra commands to run after the tables are created, loaded,
-- indexes built and extra's created.
-- ----
4. 执行性能测试
[admin@zytob02 run]$ ./runBenchmark.sh props.ob
06:23:28,063 [main] INFO jTPCC : Term-00,
06:23:28,065 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
06:23:28,066 [main] INFO jTPCC : Term-00, BenchmarkSQL v5.0
06:23:28,066 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
06:23:28,066 [main] INFO jTPCC : Term-00, (c) 2003, Raul Barbosa
06:23:28,066 [main] INFO jTPCC : Term-00, (c) 2004-2016, Denis Lussier
06:23:28,070 [main] INFO jTPCC : Term-00, (c) 2016, Jan Wieck
06:23:28,070 [main] INFO jTPCC : Term-00, +-------------------------------------------------------------+
06:23:28,070 [main] INFO jTPCC : Term-00,
06:23:28,070 [main] INFO jTPCC : Term-00, db=mysql
06:23:28,070 [main] INFO jTPCC : Term-00, driver=com.alipay.oceanbase.jdbc.Driver
06:23:28,071 [main] INFO jTPCC : Term-00, conn=jdbc:oceanbase://192.168.163.113:2883/test
06:23:28,071 [main] INFO jTPCC : Term-00, user=root@obmysql
06:23:28,071 [main] INFO jTPCC : Term-00,
06:23:28,071 [main] INFO jTPCC : Term-00, warehouses=1
06:23:28,071 [main] INFO jTPCC : Term-00, terminals=5
06:23:28,073 [main] INFO jTPCC : Term-00, runMins=5
06:23:28,073 [main] INFO jTPCC : Term-00, limitTxnsPerMin=0
06:23:28,073 [main] INFO jTPCC : Term-00, terminalWarehouseFixed=true
06:23:28,073 [main] INFO jTPCC : Term-00,
06:23:28,073 [main] INFO jTPCC : Term-00, newOrderWeight=45
06:23:28,074 [main] INFO jTPCC : Term-00, paymentWeight=43
06:23:28,074 [main] INFO jTPCC : Term-00, orderStatusWeight=4
06:23:28,074 [main] INFO jTPCC : Term-00, deliveryWeight=4
06:23:28,074 [main] INFO jTPCC : Term-00, stockLevelWeight=4
06:23:28,074 [main] INFO jTPCC : Term-00,
06:23:28,074 [main] INFO jTPCC : Term-00, resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
06:23:28,075 [main] INFO jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
06:23:28,075 [main] INFO jTPCC : Term-00,
06:23:28,092 [main] INFO jTPCC : Term-00, copied props.ob to my_result_2024-03-16_062328/run.properties
06:23:28,093 [main] INFO jTPCC : Term-00, created my_result_2024-03-16_062328/data/runInfo.csv for runID 10
06:23:28,093 [main] INFO jTPCC : Term-00, writing per transaction results to my_result_2024-03-16_062328/data/result.csv
06:23:28,095 [main] INFO jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
06:23:28,095 [main] INFO jTPCC : Term-00, osCollectorInterval=1
06:23:28,095 [main] INFO jTPCC : Term-00, osCollectorSSHAddr=null
06:23:28,095 [main] INFO jTPCC : Term-00, osCollectorDevices=net_ens33 blk_sda
06:23:28,230 [main] INFO jTPCC : Term-00,
06:23:28,555 [main] INFO jTPCC : Term-00, C value for C_LAST during load: 216
06:23:28,555 [main] INFO jTPCC : Term-00, C value for C_LAST this run: 139
06:23:28,556 [main] INFO jTPCC : Term-00,
Term-00, Running Average tpmTOTAL: 2313.61 Current tpmTOTAL: 77184 Memory Usage: 6MB / 151MB
06:28:28,968 [Thread-5] INFO jTPCC : Term-00,
06:28:28,969 [Thread-5] INFO jTPCC : Term-00,
06:28:28,969 [Thread-5] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 1029.09
06:28:28,970 [Thread-5] INFO jTPCC : Term-00, Measured tpmTOTAL = 2312.56
06:28:28,970 [Thread-5] INFO jTPCC : Term-00, Session Start = 2024-03-16 06:23:28
06:28:28,970 [Thread-5] INFO jTPCC : Term-00, Session End = 2024-03-16 06:28:28
06:28:28,970 [Thread-5] INFO jTPCC : Term-00, Transaction Count = 11572
5 获取 执行计划
登录 mysql -h 192.168.163.113 -uroot@obmysql#obdemo -P2883 -p -c -A test
获取top sql
mysql> SELECT user_name,sql_id, count(*), round(avg(elapsed_time)) avg_elapsed_time, round(avg(execute_time)) avg_exec_time
-> FROM gv$OB_SQL_AUDIT s
-> WHERE 1=1
-> and request_time >= time_to_usec(DATE_SUB(current_timestamp, INTERVAL 1 day))
-> GROUP BY sql_id
-> order by user_name,avg_elapsed_time desc limit 10;
+-----------+----------------------------------+----------+------------------+---------------+
| user_name | sql_id | count(*) | avg_elapsed_time | avg_exec_time |
+-----------+----------------------------------+----------+------------------+---------------+
| root | FC3FED8CCB2946DE54F1C5BA3656023C | 68 | 45419 | 5942 |
| root | 227161BB8903E42465279C2C90395D05 | 4 | 41991 | 41155 |
| root | F4585305C4CB9B091C750826A7DEDD13 | 76 | 30541 | 3767 |
| root | B447DE16B3F42D2409B2A2BE50328E63 | 76 | 17806 | 5436 |
| root | F95CD7A05C7064A028D76E0088B147F7 | 71 | 8840 | 1197 |
| root | 8D6E84735C0B8FB1823D199E2CA141C8 | 71 | 7002 | 6653 |
| root | C9FA41444B84AF63AD4FB24B9252F1A6 | 7 | 5516 | 5228 |
| root | 5984364296F35BE1B71CD5622426385A | 7 | 4082 | 3615 |
| root | B3FC9C1BD6CAB2D8A9180BEF92F112D2 | 7 | 3574 | 3014 |
| root | 482BA7822AE7BE644CEBEB55213E7284 | 68 | 3110 | 2828 |
+-----------+----------------------------------+----------+------------------+---------------+
10 rows in set (0.04 sec)
mysql> select query_sql from gv$OB_PLAN_CACHE_PLAN_STAT where sql_id='FC3FED8CCB2946DE54F1C5BA3656023C';
+----------------------------------------------------------------------------------------------------+
| query_sql |
+----------------------------------------------------------------------------------------------------+
| SELECT d_tax, d_next_o_id FROM bmsql_district WHERE d_w_id = 1 AND d_id = 4 FOR UPDATE |
| SELECT d_tax, d_next_o_id FROM bmsql_district WHERE d_w_id = 1 AND d_id = 9 FOR UPDATE |
+----------------------------------------------------------------------------------------------------+
2 rows in set (0.01 sec)
mysql> select query_sql from gv$OB_PLAN_CACHE_PLAN_STAT where sql_id='227161BB8903E42465279C2C90395D05';
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| query_sql |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| SELECT count(*) AS low_stock FROM ( SELECT s_w_id, s_i_id, s_quantity FROM bmsql_stock WHERE s_w_id = 1 AND s_quantity < 20 AND s_i_id IN ( SELECT ol_i_id FROM bmsql_district JOIN bmsql_order_line ON ol_w_id = d_w_id AND ol_d_id = d_id AND ol_o_id >= d_next_o_id - 20 AND ol_o_id < d_next_o_id WHERE d_w_id = 1 AND d_id = 9 ) ) AS L |
| SELECT count(*) AS low_stock FROM ( SELECT s_w_id, s_i_id, s_quantity FROM bmsql_stock WHERE s_w_id = 1 AND s_quantity < 19 AND s_i_id IN ( SELECT ol_i_id FROM bmsql_district JOIN bmsql_order_line ON ol_w_id = d_w_id AND ol_d_id = d_id AND ol_o_id >= d_next_o_id - 20 AND ol_o_id < d_next_o_id WHERE d_w_id = 1 AND d_id = 10 ) ) AS L |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.01 sec)
mysql> select query_sql from gv$OB_PLAN_CACHE_PLAN_STAT where sql_id='F4585305C4CB9B091C750826A7DEDD13';
+-----------------------------------------------------------------------------------------+
| query_sql |
+-----------------------------------------------------------------------------------------+
| UPDATE bmsql_district SET d_ytd = d_ytd + 1917.27 WHERE d_w_id = 1 AND d_id = 1 |
| UPDATE bmsql_district SET d_ytd = d_ytd + 4803.7 WHERE d_w_id = 1 AND d_id = 5 |
| UPDATE bmsql_district SET d_ytd = d_ytd + 1177.88 WHERE d_w_id = 1 AND d_id = 1 |
| UPDATE bmsql_district SET d_ytd = d_ytd + 147.4 WHERE d_w_id = 1 AND d_id = 2 |
+-----------------------------------------------------------------------------------------+
4 rows in set (0.00 sec)
获取执行前三个 top sql 执行计划
mysql> explain SELECT d_tax, d_next_o_id FROM bmsql_district WHERE d_w_id = 1 AND d_id = 4 FOR UPDATE;
explain SELECT count(*) AS low_stock FROM ( SELECT s_w_id, s_i_id, s_quantity FROM bmsql_stock WHERE s_w_id = 1 AND s_quantity < 20 AND s_i_id IN ( SELECT ol_i_id FROM bmsql_district JOIN bmsql_order_line ON ol_w_id = d_w_id AND ol_d_id = d_id AND ol_o_id >= d_next_o_id - 20 AND ol_o_id < d_next_o_id WHERE d_w_id = 1 AND d_id = 9 ) ) AS L ;
explain UPDATE bmsql_district SET d_ytd = d_ytd + 1917.27 WHERE d_w_id = 1 AND d_id = 1 ;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30349701/viewspace-3009187/ ,如需转载,请注明出处,否则将追究法律责任。