Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询

本文主要是介绍Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询

文章目录

  • Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询
    • 环境介绍
    • 配置BenchmarkSQL
    • 开始BenchmarkSQL测试
    • 查看执行计划
      • 查询top sql
      • 查看执行计划
    • 总结
    • 参考文档

环境介绍

操作系统:redhat7.9

内核版本:3.10.0-1160.el7.x86_64

Ocaenbase集群版本:社区版单副本集群,3.1.0,租户为mysql模式

Benchmarksql要求jdk8版本及以上的java环境

[admin@rac04 ~]$ java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

配置BenchmarkSQL

创建ob的tpcc数据库和tpcc用户

create database tpcc;
create user tpcc identified by 'tpcc';
grant all on *.* to tpcc;

修改ob的超时设置

set global ob_query_timeout=36000000000;
set global ob_trx_timeout=36000000000;-- 为了获得top sql,需要将sql审计打开,默认是开启的
show variables like 'ob_enable_sql_audit';
MySQL [tpcc]> show variables like 'ob_enable_sql_audit';
+---------------------+-------+
| Variable_name       | Value |
+---------------------+-------+
| ob_enable_sql_audit | ON    |
+---------------------+-------+

下载BenchmarkSQL

su - admin
wget -O benchmarksql-5.0.zip https://github.com/meiq4096/benchmarksql-5.0/archive/refs/heads/master.zip

配置benchmarksql

unzip benchmarksql-5.0.zip
cd benchmarksql-5.0-master/run
# 编辑props.ob配置文件
cp props.ob props.ob.bak20240312
vi props.obdb=oceanbase
driver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
conn=jdbc:oceanbase://127.1:2883/tpcc?useUnicode=true&characterEncoding=utf-8
user=tpcc@yw#obcluster
password=tpcc// 仓库数为2
warehouses=2
// 并发数为5
loadWorkers=5terminals=2
//To run specified transactions per terminal- runMins must equal zero
runTxnsPerTerminal=0
//To run for specified minutes- runTxnsPerTerminal must equal zero
// 运行10分钟
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
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

修改创建表的脚本

cd /sql.oceanbase
cp tableCreates.sql tableCreates.sql.bak20240312
# varchar2类型字段,与mysql租户不兼容,修改varchar2为varchar
sed -i 's/varchar2/varchar/g' tableCreates.sql
# 脚本中创建表组的语句有误,表组名称不能使用双引号
sed -i 's/\"tpcc_group\"/tpcc_group/g' tableCreates.sql
# mysql类型的租户不支持sequence,删除创建sequence的语句
sed -i 's/create sequence bmsql_hist_id_seq;//g' tableCreates.sql
cat tableCreates.sql

创建表

[admin@rac04 run]$ pwd 
/software/benchmarksql-5.0-master/run
[admin@rac04 run]$ ./runSQL.sh props.ob sql.oceanbase/tableCreates.sql

校验表

MySQL [tpcc]> show tables;
+------------------+
| Tables_in_tpcc   |
+------------------+
| bmsql_config     |
| bmsql_customer   |
| bmsql_district   |
| bmsql_history    |
| bmsql_item       |
| bmsql_new_order  |
| bmsql_oorder     |
| bmsql_order_line |
| bmsql_stock      |
| bmsql_warehouse  |
+------------------+
10 rows in set (0.004 sec)

加载数据入表

[admin@rac04 run]$ ./runLoader.sh props.ob
Starting BenchmarkSQL LoadDatadriver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
conn=jdbc:oceanbase://127.1:2883/tpcc?useUnicode=true&characterEncoding=utf-8
user=tpcc@yw#obcluster
password=***********
warehouses=2
loadWorkers=5
fileLocation (not defined)
csvNullValue (not defined - using default 'NULL')Worker 000: Loading ITEM
Worker 001: Loading Warehouse      1
Worker 002: Loading Warehouse      2
Worker 000: Loading ITEM done
Worker 001: Loading Warehouse      1 done
Worker 002: Loading Warehouse      2 done

创建索引

[admin@rac04 run]$ ./runSQL.sh props.ob sql.oceanbase/indexCreates.sql
# ------------------------------------------------------------
# Loading SQL file sql.oceanbase/indexCreates.sql
# ------------------------------------------------------------
create index bmsql_customer_idx1
on  bmsql_customer (c_w_id, c_d_id, c_last, c_first) local;
create  index bmsql_oorder_idx1
on  bmsql_oorder (o_w_id, o_d_id, o_carrier_id, o_id) local;

开始BenchmarkSQL测试

开始测试之前,手动做一次合并

MySQL [oceanbase]> alter system major freeze;
Query OK, 0 rows affected (0.007 sec)

开始测试

[admin@rac04 run]$ ./runBenchmark.sh props.ob
01:27:24,021 [main] INFO   jTPCC : Term-00, 
01:27:24,028 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
01:27:24,029 [main] INFO   jTPCC : Term-00,      BenchmarkSQL v5.0
01:27:24,029 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
01:27:24,029 [main] INFO   jTPCC : Term-00,  (c) 2003, Raul Barbosa
01:27:24,029 [main] INFO   jTPCC : Term-00,  (c) 2004-2016, Denis Lussier
01:27:24,031 [main] INFO   jTPCC : Term-00,  (c) 2016, Jan Wieck
01:27:24,031 [main] INFO   jTPCC : Term-00, +-------------------------------------------------------------+
01:27:24,031 [main] INFO   jTPCC : Term-00, 
01:27:24,031 [main] INFO   jTPCC : Term-00, db=oracle
01:27:24,032 [main] INFO   jTPCC : Term-00, driver=com.alipay.oceanbase.obproxy.mysql.jdbc.Driver
01:27:24,032 [main] INFO   jTPCC : Term-00, conn=jdbc:oceanbase://127.1:2883/tpcc?useUnicode=true&characterEncoding=utf-8
01:27:24,032 [main] INFO   jTPCC : Term-00, user=tpcc@yw#obcluster
01:27:24,032 [main] INFO   jTPCC : Term-00, 
01:27:24,032 [main] INFO   jTPCC : Term-00, warehouses=2
01:27:24,032 [main] INFO   jTPCC : Term-00, terminals=2
01:27:24,033 [main] INFO   jTPCC : Term-00, runMins=10
01:27:24,033 [main] INFO   jTPCC : Term-00, limitTxnsPerMin=0
01:27:24,034 [main] INFO   jTPCC : Term-00, terminalWarehouseFixed=true
01:27:24,034 [main] INFO   jTPCC : Term-00, 
01:27:24,034 [main] INFO   jTPCC : Term-00, newOrderWeight=45
01:27:24,034 [main] INFO   jTPCC : Term-00, paymentWeight=43
01:27:24,034 [main] INFO   jTPCC : Term-00, orderStatusWeight=4
01:27:24,034 [main] INFO   jTPCC : Term-00, deliveryWeight=4
01:27:24,034 [main] INFO   jTPCC : Term-00, stockLevelWeight=4
01:27:24,034 [main] INFO   jTPCC : Term-00, 
01:27:24,034 [main] INFO   jTPCC : Term-00, resultDirectory=my_result_%tY-%tm-%td_%tH%tM%tS
01:27:24,034 [main] INFO   jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
01:27:24,034 [main] INFO   jTPCC : Term-00, 
01:27:24,045 [main] INFO   jTPCC : Term-00, copied props.ob to my_result_2024-03-12_012724/run.properties
01:27:24,045 [main] INFO   jTPCC : Term-00, created my_result_2024-03-12_012724/data/runInfo.csv for runID 6
01:27:24,046 [main] INFO   jTPCC : Term-00, writing per transaction results to my_result_2024-03-12_012724/data/result.csv
01:27:24,047 [main] INFO   jTPCC : Term-00, osCollectorScript=./misc/os_collector_linux.py
01:27:24,047 [main] INFO   jTPCC : Term-00, osCollectorInterval=1
01:27:24,047 [main] INFO   jTPCC : Term-00, osCollectorSSHAddr=null
01:27:24,047 [main] INFO   jTPCC : Term-00, osCollectorDevices=null
01:27:24,134 [main] INFO   jTPCC : Term-00,
01:27:24,420 [main] INFO   jTPCC : Term-00, C value for C_LAST during load: 19
01:27:24,421 [main] INFO   jTPCC : Term-00, C value for C_LAST this run:    122
01:27:24,421 [main] INFO   jTPCC : Term-00, 
……
……Term-00, Running Average tpmTOTAL: 1434.69    Current tpmTOTAL: 95832    Memory Usage: 18MB / 196MB          
01:37:24,679 [Thread-1] INFO   jTPCC : Term-00, 
01:37:24,679 [Thread-1] INFO   jTPCC : Term-00, 
01:37:24,679 [Thread-1] INFO   jTPCC : Term-00, Measured tpmC (NewOrders) = 637.1
01:37:24,680 [Thread-1] INFO   jTPCC : Term-00, Measured tpmTOTAL = 1434.47
01:37:24,680 [Thread-1] INFO   jTPCC : Term-00, Session Start     = 2024-03-12 01:27:24
01:37:24,680 [Thread-1] INFO   jTPCC : Term-00, Session End       = 2024-03-12 01:37:24
01:37:24,680 [Thread-1] INFO   jTPCC : Term-00, Transaction Count = 14348

查看执行计划

查询top sql

查找性能测试期间,执行时间top5 sql

这里着重解释一下request_time的条件,以性能测试结束时间为基点,查找请求时间位于2024-03-12 01:37:24及之前10分钟内的sql。需要注意的是将request_time的值是距离 1970-01-01 00:00:00.000000 的微秒数,因此需要调用time_to_usec函数转换时间。

SELECT/*+ PARALLEL(4)*/ sql_id,query_sql,plan_id, elapsed_time , trace_id    FROM oceanbase.gv$sql_audit     WHERE   tenant_id = 1001 and IS_EXECUTOR_RPC = 0 and request_time > (time_to_usec(date_format('2024-03-12 01:37:24','%Y-%m-%d %T')) - 10000000*6*10) AND request_time < time_to_usec(date_format('2024-03-12 01:37:24','%Y-%m-%d %T')) ORDER BY elapsed_time DESC LIMIT 10;MySQL [tpcc]> SELECT/*+ PARALLEL(4)*/ sql_id,query_sql,plan_id, elapsed_time , trace_id    ->          FROM oceanbase.gv$sql_audit     ->          WHERE   tenant_id = 1001 ->          and IS_EXECUTOR_RPC = 0 ->          and request_time > (time_to_usec(date_format('2024-03-12 01:37:24','%Y-%m-%d %T')) - 10000000*6*10) ->          AND request_time < time_to_usec(date_format('2024-03-12 01:37:24','%Y-%m-%d %T')) ->          ORDER BY elapsed_time DESC LIMIT 10\G
*************************** 1. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_sql: SELECT count(*) AS low_stock FROM (    SELECT s_w_id, s_i_id, s_quantity         FROM bmsql_stock         WHERE s_w_id = 2 AND s_quantity < 12 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 = 2 AND d_id = 5         )     )plan_id: 130
elapsed_time: 19786trace_id: YB420B0B0B0E-00061364401FFA67
*************************** 2. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_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 < 13 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         )     )plan_id: 130
elapsed_time: 18749trace_id: YB420B0B0B0E-000613643FFFF583
*************************** 3. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_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 < 16 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         )     )plan_id: 130
elapsed_time: 18074trace_id: YB420B0B0B0E-00061364402FC346
*************************** 4. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_sql: SELECT s_quantity, s_data,        s_dist_01, s_dist_02, s_dist_03, s_dist_04,        s_dist_05, s_dist_06, s_dist_07, s_dist_08,        s_dist_09, s_dist_10     FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 68621     FOR UPDATEplan_id: 116
elapsed_time: 17701trace_id: YB420B0B0B0E-00061364404FC6E5
*************************** 5. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_sql: SELECT s_quantity, s_data,        s_dist_01, s_dist_02, s_dist_03, s_dist_04,        s_dist_05, s_dist_06, s_dist_07, s_dist_08,        s_dist_09, s_dist_10     FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 59773     FOR UPDATEplan_id: 116
elapsed_time: 16933trace_id: YB420B0B0B0E-00061364400FF6EF
*************************** 6. row ***************************sql_id:                                 query_sql: SELECT s_quantity, s_data,        s_dist_01, s_dist_02, s_dist_03, s_dist_04,        s_dist_05, s_dist_06, s_dist_07, s_dist_08,        s_dist_09, s_dist_10     FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 45283     FOR UPDATEplan_id: 116
elapsed_time: 16895trace_id: YB420B0B0B0E-00061364401FFAE2
*************************** 7. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_sql: SELECT s_quantity, s_data,        s_dist_01, s_dist_02, s_dist_03, s_dist_04,        s_dist_05, s_dist_06, s_dist_07, s_dist_08,        s_dist_09, s_dist_10     FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 83525     FOR UPDATEplan_id: 116
elapsed_time: 15588trace_id: YB420B0B0B0E-00061364401FF927
*************************** 8. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_sql: SELECT i_price, i_name, i_data     FROM bmsql_item     WHERE i_id = 39891plan_id: 113
elapsed_time: 15104trace_id: YB420B0B0B0E-00061364403FC65B
*************************** 9. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_sql: SELECT c_first, c_middle, c_last, c_street_1, c_street_2,        c_city, c_state, c_zip, c_phone, c_since, c_credit,        c_credit_lim, c_discount, c_balance     FROM bmsql_customer     WHERE c_w_id = 2 AND c_d_id = 4 AND c_id = 193     FOR UPDATEplan_id: 118
elapsed_time: 15015trace_id: YB420B0B0B0E-00061364401FF7C1
*************************** 10. row ***************************sql_id: FFFCA4D67EA0A788813031B8BBC3B329query_sql: SELECT i_price, i_name, i_data     FROM bmsql_item     WHERE i_id = 4421plan_id: 113
elapsed_time: 14234trace_id: YB420B0B0B0E-00061364400FFABC
10 rows in set (0.026 sec)

查看执行计划

首先查看top10的解析执行计划,这里挑3条,plan_id分别为130,116,113。

MySQL [tpcc]> explain SELECT count(*) AS low_stock FROM (    SELECT s_w_id, s_i_id, s_quantity   FROM bmsql_stock    WHERE s_w_id = 2 AND s_quantity < 12 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 = 2 AND d_id = 5));
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ==========================================================
|ID|OPERATOR            |NAME            |EST. ROWS|COST |
----------------------------------------------------------
|0 |SCALAR GROUP BY     |                |1        |46984|
|1 | NESTED-LOOP JOIN   |                |1221     |46750|
|2 |  SUBPLAN SCAN      |VIEW2           |1215     |2677 |
|3 |   HASH DISTINCT    |                |1215     |2509 |
|4 |    NESTED-LOOP JOIN|                |1219     |1239 |
|5 |     TABLE GET      |bmsql_district  |1        |53   |
|6 |     TABLE SCAN     |bmsql_order_line|3656     |1194 |
|7 |  TABLE GET         |bmsql_stock     |1        |37   |
==========================================================Outputs & filters: 
-------------------------------------0 - output([T_FUN_COUNT(*)]), filter(nil), group(nil), agg_func([T_FUN_COUNT(*)])1 - output([1]), filter(nil), conds(nil), nl_params_([VIEW2.VIEW1.ol_i_id])2 - output([VIEW2.VIEW1.ol_i_id]), filter(nil), access([VIEW2.VIEW1.ol_i_id])3 - output([bmsql_order_line.ol_i_id]), filter(nil), distinct([bmsql_order_line.ol_i_id])4 - output([bmsql_order_line.ol_i_id]), filter(nil), conds(nil), nl_params_([bmsql_district.d_next_o_id - 20], [bmsql_district.d_next_o_id])5 - output([bmsql_district.d_next_o_id]), filter([bmsql_district.d_next_o_id > bmsql_district.d_next_o_id - 20]), access([bmsql_district.d_next_o_id]), partitions(p0)6 - output([bmsql_order_line.ol_i_id]), filter(nil), access([bmsql_order_line.ol_i_id]), partitions(p0)7 - output([1]), filter([bmsql_stock.s_quantity < 12]), access([bmsql_stock.s_quantity]), partitions(p0)|
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.010 sec)
MySQL [tpcc]> explain SELECT s_quantity, s_data,        s_dist_01, s_dist_02, s_dist_03, s_dist_04,        s_dist_05, s_dist_06, s_dist_07, s_dist_08,        s_dist_09, s_dist_10     FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 59773     FOR UPDATE;
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| =========================================
|ID|OPERATOR |NAME       |EST. ROWS|COST|
-----------------------------------------
|0 |TABLE GET|bmsql_stock|1        |54  |
=========================================Outputs & filters: 
-------------------------------------0 - output([bmsql_stock.s_quantity], [bmsql_stock.s_data], [bmsql_stock.s_dist_01], [bmsql_stock.s_dist_02], [bmsql_stock.s_dist_03], [bmsql_stock.s_dist_04], [bmsql_stock.s_dist_05], [bmsql_stock.s_dist_06], [bmsql_stock.s_dist_07], [bmsql_stock.s_dist_08], [bmsql_stock.s_dist_09], [bmsql_stock.s_dist_10]), filter(nil), access([bmsql_stock.s_w_id], [bmsql_stock.s_i_id], [bmsql_stock.s_quantity], [bmsql_stock.s_data], [bmsql_stock.s_dist_01], [bmsql_stock.s_dist_02], [bmsql_stock.s_dist_03], [bmsql_stock.s_dist_04], [bmsql_stock.s_dist_05], [bmsql_stock.s_dist_06], [bmsql_stock.s_dist_07], [bmsql_stock.s_dist_08], [bmsql_stock.s_dist_09], [bmsql_stock.s_dist_10]), partitions(p0)|
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.005 sec)
MySQL [tpcc]> explain SELECT i_price, i_name, i_data     FROM bmsql_item     WHERE i_id = 39891;
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query Plan                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ========================================
|ID|OPERATOR |NAME      |EST. ROWS|COST|
----------------------------------------
|0 |TABLE GET|bmsql_item|1        |53  |
========================================Outputs & filters: 
-------------------------------------0 - output([bmsql_item.i_price], [bmsql_item.i_name], [bmsql_item.i_data]), filter(nil), access([bmsql_item.i_price], [bmsql_item.i_name], [bmsql_item.i_data]), partitions(p0)|
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.004 sec)

查看top3的实际执行计划。由于执行计划已经刷出缓存,因此性能测试期间top10sql的实际执行计划没法看到。这里手动执行相关sql,再查询其执行计划。

MySQL [tpcc]> SELECT count(*) AS low_stock FROM (    SELECT s_w_id, s_i_id, s_quantity   FROM bmsql_stock    WHERE s_w_id = 2 AND s_quantity < 12 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 = 2 AND d_id = 5));
-- 查询刚刚执行的sql的plan_id
MySQL [tpcc1]> SELECT/*+ PARALLEL(4)*/ tenant_id,svr_ip,svr_port,sql_id,query_sql,plan_id, elapsed_time , trace_id  ->          FROM oceanbase.gv$sql_audit     ->          WHERE   tenant_id = 1001 and user_name='tpcc'->          and IS_EXECUTOR_RPC = 0 ->          and request_time > (time_to_usec(now()) - 10000000*6*10) ->          AND request_time < time_to_usec(now()) ->          ORDER BY elapsed_time DESC LIMIT 10\G
*************************** 1. row ***************************tenant_id: 1001svr_ip: 11.11.11.14svr_port: 2882sql_id: 9EDED4BC6305E5F4FCF86A6366BDD638query_sql: SELECT count(*) AS low_stock FROM (    SELECT s_w_id, s_i_id, s_quantity   FROM bmsql_stock    WHERE s_w_id = 2 AND s_quantity < 12 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 = 2 AND d_id = 5))plan_id: 273
elapsed_time: 21739trace_id: YB420B0B0B0E-00061364403FC7B5-- 根据sql_id查看实际执行计划
MySQL [tpcc1]> select * from oceanbase.gv$plan_cache_plan_explain where tenant_id=1001 and ip='11.11.11.14' and port='2882' and plan_id =273;
+-----------+-------------+------+---------+------------+--------------+--------------------------+------------------+------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TENANT_ID | IP          | PORT | PLAN_ID | PLAN_DEPTH | PLAN_LINE_ID | OPERATOR                 | NAME             | ROWS | COST  | PROPERTY                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
+-----------+-------------+------+---------+------------+--------------+--------------------------+------------------+------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|      1001 | 11.11.11.14 | 2882 |     273 |          0 |            0 | PHY_SCALAR_AGGREGATE     | NULL             |    1 | 46983 | NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|      1001 | 11.11.11.14 | 2882 |     273 |          1 |            1 |  PHY_NESTED_LOOP_JOIN    | NULL             | 1221 | 46749 | NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|      1001 | 11.11.11.14 | 2882 |     273 |          2 |            2 |   PHY_SUBPLAN_SCAN       | NULL             | 1215 |  2676 | NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|      1001 | 11.11.11.14 | 2882 |     273 |          3 |            3 |    PHY_HASH_DISTINCT     | NULL             | 1215 |  2508 | NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|      1001 | 11.11.11.14 | 2882 |     273 |          4 |            4 |     PHY_NESTED_LOOP_JOIN | NULL             | 1219 |  1238 | NULL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|      1001 | 11.11.11.14 | 2882 |     273 |          5 |            5 |      PHY_TABLE_SCAN      | bmsql_district   |    1 |    52 | table_rows:20, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:0, est_method:local_storage                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|      1001 | 11.11.11.14 | 2882 |     273 |          5 |            6 |      PHY_TABLE_SCAN      | bmsql_order_line | 3656 |  1193 | table_rows:663235, physical_range_rows:3655, logical_range_rows:3655, index_back_rows:0, output_rows:3655, est_method:local_storage, avaiable_index_name[bmsql_order_line], estimation info[table_id:1100611139453804, (table_type:1, version:0-1710180010831939-1710180010831939, logical_rc:32898, physical_rc:32898), (table_type:7, version:1710180000826357-1710180010831939-1710180031319922, logical_rc:0, physical_rc:0), (table_type:5, version:1710180000826357-1710180010831939-1710180031319922, logical_rc:0, physical_rc:0), (table_type:0, version:1710180031319922-1710180031319922-9223372036854775807, logical_rc:0, physical_rc:0)] |
|      1001 | 11.11.11.14 | 2882 |     273 |          2 |            7 |   PHY_TABLE_SCAN         | bmsql_stock      |    1 |    36 | table_rows:200000, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:0, est_method:local_storage, estimation info[table_id:1100611139453806, (table_type:1, version:0-1710180010831939-1710180010831939, logical_rc:200000, physical_rc:200000), (table_type:7, version:1710180000827822-1710180010831939-1710180031377423, logical_rc:0, physical_rc:0), (table_type:5, version:1710180000827822-1710180010831939-1710180031377423, logical_rc:0, physical_rc:0), (table_type:0, version:1710180031377423-1710180031377423-9223372036854775807, logical_rc:0, physical_rc:0)]                                               |
+-----------+-------------+------+---------+------------+--------------+--------------------------+------------------+------+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
8 rows in set (0.012 sec)

另外两个sql也是同样的方法

MySQL [tpcc]> SELECT s_quantity, s_data,        s_dist_01, s_dist_02, s_dist_03, s_dist_04,        s_dist_05, s_dist_06, s_dist_07, s_dist_08,        s_dist_09, s_dist_10     FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 59773     FOR UPDATE;
+------------+------------------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
| s_quantity | s_data                                   | s_dist_01                | s_dist_02                | s_dist_03                | s_dist_04                | s_dist_05                | s_dist_06                | s_dist_07                | s_dist_08                | s_dist_09                | s_dist_10                |
+------------+------------------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
|        104 | BpZzCr9yN9SC8clF5llHzwmg5ANR2drV0ZM553QR | mWO9fxl80umm3A23HwjvNySD | mL3z0rJqTApoGIIJjan5bGJd | xqELg15kkS8s6HTtS9hh4sXg | dTdPg5Jxlow6W9rR8rWoZxCH | tdRCLqTvKjzL00278CuyVXnb | DXL4EfkVLKtmppr1izzGfEKU | b3JcaKms9g1AwbXJyfBP8X3f | ECNsuU7KphEUcLmp9csAaWjv | PFSSM2fGrMSrNx7stdhSb5HS | Juk9PMbM4rgf0MbUcNRQJFkr |
+------------+------------------------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+
1 row in set (0.012 sec)MySQL [tpcc1]> SELECT/*+ PARALLEL(4)*/ tenant_id,svr_ip,svr_port,sql_id,query_sql,plan_id, elapsed_time , trace_id  ->          FROM oceanbase.gv$sql_audit     ->          WHERE   tenant_id = 1001 and user_name='tpcc'->          and IS_EXECUTOR_RPC = 0 ->          and request_time > (time_to_usec(now()) - 10000000*6*10) ->          AND request_time < time_to_usec(now()) ->          ORDER BY elapsed_time DESC LIMIT 10\G……
*************************** 2. row ***************************tenant_id: 1001svr_ip: 11.11.11.14svr_port: 2882sql_id: 7229213613983BC5FDA15AD11EC70D01query_sql: SELECT s_quantity, s_data,        s_dist_01, s_dist_02, s_dist_03, s_dist_04,        s_dist_05, s_dist_06, s_dist_07, s_dist_08,        s_dist_09, s_dist_10     FROM bmsql_stock     WHERE s_w_id = 2 AND s_i_id = 59773     FOR UPDATEplan_id: 285
elapsed_time: 11143trace_id: YB420B0B0B0E-00061364401FFB9AMySQL [tpcc1]> select * from oceanbase.gv$plan_cache_plan_explain where tenant_id=1001 and ip='11.11.11.14' and port='2882' and plan_id =285;
+-----------+-------------+------+---------+------------+--------------+----------------+-------------+------+------+----------------------------------------------------------------------------------------------------------------------------+
| TENANT_ID | IP          | PORT | PLAN_ID | PLAN_DEPTH | PLAN_LINE_ID | OPERATOR       | NAME        | ROWS | COST | PROPERTY                                                                                                                   |
+-----------+-------------+------+---------+------------+--------------+----------------+-------------+------+------+----------------------------------------------------------------------------------------------------------------------------+
|      1001 | 11.11.11.14 | 2882 |     285 |          0 |            0 | PHY_TABLE_SCAN | bmsql_stock |    1 |   53 | table_rows:200000, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:1, est_method:local_storage |
+-----------+-------------+------+---------+------------+--------------+----------------+-------------+------+------+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.008 sec)
MySQL [tpcc]> SELECT i_price, i_name, i_data     FROM bmsql_item     WHERE i_id = 39891;
+---------+------------------------+-----------------------------------------------+
| i_price | i_name                 | i_data                                        |
+---------+------------------------+-----------------------------------------------+
|   69.54 | OMb08X4TPeHtLe428FtyEC | wAUmMP35zjmdWqzAVFPMijvh9fugn6EzuSclVnNIabBy8 |
+---------+------------------------+-----------------------------------------------+
1 row in set (0.003 sec)
MySQL [tpcc1]> SELECT/*+ PARALLEL(4)*/ tenant_id,svr_ip,svr_port,sql_id,query_sql,plan_id, elapsed_time , trace_id  ->          FROM oceanbase.gv$sql_audit     ->          WHERE   tenant_id = 1001 and user_name='tpcc'->          and IS_EXECUTOR_RPC = 0 ->          and request_time > (time_to_usec(now()) - 10000000*6*10) ->          AND request_time < time_to_usec(now()) ->          ORDER BY elapsed_time DESC LIMIT 10\G
……
*************************** 2. row ***************************tenant_id: 1001svr_ip: 11.11.11.14svr_port: 2882sql_id: A460265EC2F0763A15DD27CE9E4E2200query_sql: SELECT i_price, i_name, i_data     FROM bmsql_item     WHERE i_id = 39891plan_id: 286
elapsed_time: 2816trace_id: YB420B0B0B0E-00061364403FC7C2
2 rows in set (0.018 sec)
MySQL [tpcc1]> select * from oceanbase.gv$plan_cache_plan_explain where tenant_id=1001 and ip='11.11.11.14' and port='2882' and plan_id =286;
+-----------+-------------+------+---------+------------+--------------+----------------+------------+------+------+----------------------------------------------------------------------------------------------------------------------------+
| TENANT_ID | IP          | PORT | PLAN_ID | PLAN_DEPTH | PLAN_LINE_ID | OPERATOR       | NAME       | ROWS | COST | PROPERTY                                                                                                                   |
+-----------+-------------+------+---------+------------+--------------+----------------+------------+------+------+----------------------------------------------------------------------------------------------------------------------------+
|      1001 | 11.11.11.14 | 2882 |     286 |          0 |            0 | PHY_TABLE_SCAN | bmsql_item |    1 |   52 | table_rows:100000, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:1, est_method:local_storage |
+-----------+-------------+------+---------+------------+--------------+----------------+------------+------+------+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.008 sec)

总结

  1. 使用benchmarksql的create_table.sql脚本创建表之前,需要修改一些内容:

    • varchar2–>varchar;
    • 创建tablegroup的语句,表组名不能使用双引号,需要删除双引号;
    • 删除创建sequence的语句。
  2. 查看执行计划的一般步骤

    • (可选)查询oceanbase.gv$sql_audit 视图获取top sql,获取tenant_id,svr_ip,svr_port,sql_id,query_sql,plan_id等关键信息

      --查看10分钟内的耗时topsql
      SELECT/*+ PARALLEL(4)*/ tenant_id,svr_ip,svr_port,sql_id,query_sql,plan_id, elapsed_time , trace_id  FROM oceanbase.gv$sql_audit     WHERE   tenant_id = 1001 and user_name='tpcc'and IS_EXECUTOR_RPC = 0 and request_time > (time_to_usec(now()) - 10000000*6*10) AND request_time < time_to_usec(now()) ORDER BY elapsed_time DESC LIMIT 10;
      
      -- 查看指定时间段内的耗时topsql,这里是2024-03-12 01:37:24至前10分钟
      SELECT/*+ PARALLEL(4)*/ *   FROM oceanbase.gv$sql_audit     WHERE   tenant_id = 1001 and IS_EXECUTOR_RPC = 0 and request_time > (time_to_usec(date_format('2024-03-12 01:37:24','%Y-%m-%d %T')) - 10000000*6*10) AND request_time < time_to_usec(date_format('2024-03-12 01:37:24','%Y-%m-%d %T')) ORDER BY elapsed_time DESC LIMIT 10;
      
    • 查询oceanbase.gv$plan_cache_plan_explain视图获取真实执行计划(缓存被清理就看不到了)

      select*
      fromoceanbase.gv$plan_cache_plan_explain
      wheretenant_id = 1001and ip = '11.11.11.14'and port = '2882'and plan_id = 286;
      
    • 对于解析执行计划,直接使用explain命令即可,比如:

      explain SELECT i_price, i_name, i_data FROM bmsql_item WHERE i_id = 39891;
      

参考文档

OceanBase分布式数据库-海量数据 笔笔算数

GitHub - meiq4096/benchmarksql-5.0: benchmarksql-5.0 for oceanbase

查询某段时间内执行时间排名 TOP N 的请求 -OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

查询排名 TOP N 的 SQL -OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

函数 -OceanBase 数据库-OceanBase文档中心-分布式数据库使用文档

这篇关于Oceanbase使用BenchmarkSQL 进行tpcc测试及执行计划查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800551

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本