SQL Monitor Report

A comprehensive execution view for OceanBase parallel query.

Report generate at  2023-01-06 17:08:31
Tenant SQL compatibility mode is mysql
TRACE_ID QUERY_SQL RETURN_ROWS REQUEST_TIME REQUEST_END_TIME ELAPSED_TIME TENANT_NAME USER_NAME DB_NAME PLAN_ID TENANT_ID MYSQL_VERSION SVR_IP SVR_PORT
Y4C360B9E1F4D-0005F192D9891CC0-0-0 select /*+ parallel(4) */ count(*) from (select a.c1 from t1 a, t1 b where a.c2 = b.c3) 1 2023-01-06 16:57:43.219200 2023-01-06 17:04:15.739500 392520309 mysql admin test 463 1004 5.7.25-OceanBase-v4.1.0.0 192.168.1.77 19510
explain select /*+ parallel(4) */ count(*) from (select a.c1 from t1 a, t1 b where a.c2 = b.c3);
+----------------------------------------------------------------------------+
| Query Plan                                                                 |
+----------------------------------------------------------------------------+
| ============================================================               |
| |ID|OPERATOR                       |NAME    |EST. ROWS|COST|               |
| ------------------------------------------------------------               |
| |0 |SCALAR GROUP BY                |        |1        |5   |               |
| |1 | PX COORDINATOR                |        |4        |5   |               |
| |2 |  EXCHANGE OUT DISTR           |:EX10002|4        |5   |               |
| |3 |   MERGE GROUP BY              |        |4        |4   |               |
| |4 |    HASH JOIN                  |        |1        |4   |               |
| |5 |     EXCHANGE IN DISTR         |        |1        |2   |               |
| |6 |      EXCHANGE OUT DISTR (HASH)|:EX10000|1        |2   |               |
| |7 |       PX BLOCK ITERATOR       |        |1        |2   |               |
| |8 |        TABLE SCAN             |a       |1        |2   |               |
| |9 |     EXCHANGE IN DISTR         |        |1        |2   |               |
| |10|      EXCHANGE OUT DISTR (HASH)|:EX10001|1        |2   |               |
| |11|       PX BLOCK ITERATOR       |        |1        |2   |               |
| |12|        TABLE SCAN             |b       |1        |2   |               |
| ============================================================               |
|                                                                            |
| Outputs & filters:                                                         |
| -------------------------------------                                      |
|   0 - output([T_FUN_COUNT_SUM(T_FUN_COUNT(*))]), filter(nil), rowset=256,  |
|       group(nil), agg_func([T_FUN_COUNT_SUM(T_FUN_COUNT(*))])              |
|   1 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256                    |
|   2 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256, dop=4             |
|   3 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256,                   |
|       group(nil), agg_func([T_FUN_COUNT(*)])                               |
|   4 - output(nil), filter(nil), rowset=256,                                |
|       equal_conds([a.c2 = b.c3]), other_conds(nil)                         |
|   5 - output([a.c2]), filter(nil), rowset=256                              |
|   6 - (#keys=1, [a.c2]), output([a.c2]), filter(nil), rowset=256, dop=4    |
|   7 - output([a.c2]), filter(nil), rowset=256                              |
|   8 - output([a.c2]), filter(nil), rowset=256,                             |
|       access([a.c2]), partitions(p[0-3])                                   |
|   9 - output([b.c3]), filter(nil), rowset=256                              |
|   10 - (#keys=1, [b.c3]), output([b.c3]), filter(nil), rowset=256, dop=4   |
|   11 - output([b.c3]), filter(nil), rowset=256                             |
|   12 - output([b.c3]), filter(nil), rowset=256,                            |
|       access([b.c3]), partitions(p[0-3])                                   |
|                                                                            |
+----------------------------------------------------------------------------+
select * from oceanbase.gv$ob_plan_cache_plan_explain where tenant_id = 1004 and plan_id = 463  and svr_ip = '192.168.1.77' and svr_port = 19510
+-----------+--------------+----------+---------+------------+--------------+-----------------------------+------+------+------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| TENANT_ID | SVR_IP       | SVR_PORT | PLAN_ID | PLAN_DEPTH | PLAN_LINE_ID | OPERATOR                    | NAME | ROWS | COST | PROPERTY                                                                                                                                      |
+-----------+--------------+----------+---------+------------+--------------+-----------------------------+------+------+------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| 1004      | 192.168.1.77 | 19510    | 463     | 0          | 0            | PHY_SCALAR_AGGREGATE        | NULL | 1    | 4    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 1          | 1            |  PHY_PX_FIFO_COORD          | NULL | 4    | 4    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 2          | 2            |   PHY_PX_REDUCE_TRANSMIT    | NULL | 4    | 4    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 3          | 3            |    PHY_MERGE_GROUP_BY       | NULL | 4    | 3    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 4          | 4            |     PHY_HASH_JOIN           | NULL | 1    | 3    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 5          | 5            |      PHY_PX_FIFO_RECEIVE    | NULL | 1    | 1    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 6          | 6            |       PHY_PX_DIST_TRANSMIT  | NULL | 1    | 1    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 7          | 7            |        PHY_GRANULE_ITERATOR | NULL | 1    | 1    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 8          | 8            |         PHY_TABLE_SCAN      | a    | 1    | 1    | table_rows:1, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:1, est_method:default_stat, avaiable_index_name[t1] |
| 1004      | 192.168.1.77 | 19510    | 463     | 5          | 9            |      PHY_PX_FIFO_RECEIVE    | NULL | 1    | 1    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 6          | 10           |       PHY_PX_DIST_TRANSMIT  | NULL | 1    | 1    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 7          | 11           |        PHY_GRANULE_ITERATOR | NULL | 1    | 1    | NULL                                                                                                                                          |
| 1004      | 192.168.1.77 | 19510    | 463     | 8          | 12           |         PHY_TABLE_SCAN      | b    | 1    | 1    | table_rows:1, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:1, est_method:default_stat, avaiable_index_name[t1] |
+-----------+--------------+----------+---------+------------+--------------+-----------------------------+------+------+------+-----------------------------------------------------------------------------------------------------------------------------------------------+

SCHEMA INFO (click to expand)

SQL Audit Info (click to expand)

ASH Report

  SELECT SQL_PLAN_LINE_ID OP_ID, IF(EVENT = '', 'CPU + WAIT FOR CPU', EVENT) AS EVENT, WAIT_CLASS, COUNT(1) EVENT_CNT, ROUND(COUNT(1) * 100 / SUM(COUNT(1)) OVER (), 2) AS Percent, MAX(P1TEXT) P1TEXT, MAX(P1) P1, MAX(P2TEXT) P2TEXT,  MAX(P2) P2, MAX(P3TEXT) P3TEXT, MAX(P3) P3
  FROM OCEANBASE.GV$ACTIVE_SESSION_HISTORY A WHERE TRACE_ID = 'Y4C360B9E1F4D-0005F192D9891CC0-0-0' GROUP BY A.SQL_PLAN_LINE_ID, A.EVENT, A.WAIT_CLASS ORDER BY 1 ASC, 4 DESC
+-------+------------------------+-------------+-----------+---------+---------+-----------------+--------+----+--------+----+
| OP_ID | EVENT                  | WAIT_CLASS  | EVENT_CNT | Percent | P1TEXT  | P1              | P2TEXT | P2 | P3TEXT | P3 |
+-------+------------------------+-------------+-----------+---------+---------+-----------------+--------+----+--------+----+
| 1     | px loop condition wait | CONCURRENCY | 393       | 33.56   | address | 140342512307856 |        | 0  |        | 0  |
| 3     | CPU + WAIT FOR CPU     | OTHER       | 92        | 7.86    |         | 0               |        | 0  |        | 0  |
| 4     | CPU + WAIT FOR CPU     | OTHER       | 686       | 58.58   |         | 0               |        | 0  |        | 0  |
+-------+------------------------+-------------+-----------+---------+---------+-----------------+--------+----+--------+----+

SQL_PLAN_MONITOR DFO LEVEL VIEW

DFO Scheduling timeline view

DFO data output timeline

DB Time View

SQL_PLAN_MONITOR SQC LEVEL VIEW

Goto Operator Order Goto Server Order

View Ordered by Operator

View Ordered by Server

SQL_PLAN_MONITOR DETAIL VIEW

Goto Operator Order Goto Thread Order

View Ordered by Operator

View Ordered by Threads

SQL Used to Generate This Report SQL

DFO LEVEL
select
  AVG(ROWS) EST_ROWS, /*0*/
  plan_monitor.PLAN_DEPTH PLAN_DEPTH,
  plan_monitor.PLAN_LINE_ID PLAN_LINE_ID,
  PLAN_OPERATION,
  COUNT(*) PARALLEL,
  MIN(FIRST_REFRESH_TIME) MIN_FIRST_REFRESH_TIME,/*5*/
  MAX(LAST_REFRESH_TIME) MAX_LAST_REFRESH_TIME,
  MIN(FIRST_CHANGE_TIME) MIN_FIRST_CHANGE_TIME,
  MAX(LAST_CHANGE_TIME) MAX_LAST_CHANGE_TIME,
  UNIX_TIMESTAMP(MIN(FIRST_REFRESH_TIME)) MIN_FIRST_REFRESH_TS,
  UNIX_TIMESTAMP(MAX(LAST_REFRESH_TIME)) MAX_LAST_REFRESH_TS, /*10*/
  UNIX_TIMESTAMP(MIN(FIRST_CHANGE_TIME)) MIN_FIRST_CHANGE_TS,
  UNIX_TIMESTAMP(MAX(LAST_CHANGE_TIME)) MAX_LAST_CHANGE_TS,
  AVG(TIMESTAMPDIFF(MICROSECOND, FIRST_REFRESH_TIME, LAST_REFRESH_TIME)) AVG_REFRESH_TIME,
  MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_REFRESH_TIME, LAST_REFRESH_TIME)) MAX_REFRESH_TIME,
  MIN(TIMESTAMPDIFF(MICROSECOND, FIRST_REFRESH_TIME, LAST_REFRESH_TIME)) MIN_REFRESH_TIME, /*15 */
  AVG(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) AVG_CHANGE_TIME,
  MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) MAX_CHANGE_TIME,
  MIN(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) MIN_CHANGE_TIME,
  SUM(OUTPUT_ROWS) TOTAL_OUTPUT_ROWS,
  (MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) - MIN(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME))) / MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)+0.00000001) SKEWNESS,
  SUM(STARTS) TOTAL_RESCAN_TIMES,/* 20 */
  MAX(OTHERSTAT_1_ID) OTHERSTAT_1_ID,
  SUM(OTHERSTAT_1_VALUE) SUM_STAT_1,
  MAX(OTHERSTAT_1_VALUE) MAX_STAT_1,
  MIN(OTHERSTAT_1_VALUE) MIN_STAT_1,
  AVG(OTHERSTAT_1_VALUE) AVG_STAT_1, /* 25 */
  MAX(OTHERSTAT_2_ID) OTHERSTAT_2_ID,
  SUM(OTHERSTAT_2_VALUE) SUM_STAT_2,
  MAX(OTHERSTAT_2_VALUE) MAX_STAT_2,
  MIN(OTHERSTAT_2_VALUE) MIN_STAT_2,
  AVG(OTHERSTAT_2_VALUE) AVG_STAT_2, /* 30 */
  MAX(OTHERSTAT_3_ID) OTHERSTAT_3_ID,
  SUM(OTHERSTAT_3_VALUE) SUM_STAT_3,
  MAX(OTHERSTAT_3_VALUE) MAX_STAT_3,
  MIN(OTHERSTAT_3_VALUE) MIN_STAT_3,
  AVG(OTHERSTAT_3_VALUE) AVG_STAT_3, /* 35 */
  MAX(OTHERSTAT_4_ID) OTHERSTAT_4_ID,
  SUM(OTHERSTAT_4_VALUE) SUM_STAT_4,
  MAX(OTHERSTAT_4_VALUE) MAX_STAT_4,
  MIN(OTHERSTAT_4_VALUE) MIN_STAT_4,
  AVG(OTHERSTAT_4_VALUE) AVG_STAT_4, /* 40 */
  MAX(OTHERSTAT_5_ID) OTHERSTAT_5_ID,
  SUM(OTHERSTAT_5_VALUE) SUM_STAT_5,
  MAX(OTHERSTAT_5_VALUE) MAX_STAT_5,
  MIN(OTHERSTAT_5_VALUE) MIN_STAT_5,
  AVG(OTHERSTAT_5_VALUE) AVG_STAT_5, /* 45*/
  MAX(OTHERSTAT_6_ID) OTHERSTAT_6_ID,
  SUM(OTHERSTAT_6_VALUE) SUM_STAT_6,
  MAX(OTHERSTAT_6_VALUE) MAX_STAT_6,
  MIN(OTHERSTAT_6_VALUE) MIN_STAT_6,
  AVG(OTHERSTAT_6_VALUE) AVG_STAT_6 /* 50 */,
  TRUNCATE(AVG(DB_TIME)/1000000000.0/2.5, 4) MY_DB_TIME,
  TRUNCATE(AVG(DB_TIME-USER_IO_WAIT_TIME)/1000000000.0/2.5, 4) MY_CPU_TIME,
  TRUNCATE(AVG(USER_IO_WAIT_TIME)/1000000000.0/2.5, 4) MY_IO_TIME
from
(
  select * FROM oceanbase.gv$sql_plan_monitor
where
  trace_id = 'Y4C360B9E1F4D-0005F192D9891CC0-0-0'
) plan_monitor
LEFT JOIN
(
 SELECT ROWS, PLAN_LINE_ID FROM oceanbase.gv$ob_plan_cache_plan_explain WHERE plan_id = 463 AND tenant_id = 1004
) plan_explain
ON
  plan_monitor.PLAN_LINE_ID = plan_explain.PLAN_LINE_ID
GROUP BY
  plan_monitor.PLAN_LINE_ID, plan_monitor.PLAN_OPERATION
ORDER BY
  plan_monitor.PLAN_LINE_ID ASC;

Server LEVEL
select
  PLAN_DEPTH,
  PLAN_LINE_ID,
  PLAN_OPERATION,
  COUNT(*) PARALLEL,
  MIN(FIRST_REFRESH_TIME) MIN_FIRST_REFRESH_TIME,
  MAX(LAST_REFRESH_TIME) MAX_LAST_REFRESH_TIME,
  MIN(FIRST_CHANGE_TIME) MIN_FIRST_CHANGE_TIME,
  MAX(LAST_CHANGE_TIME) MAX_LAST_CHANGE_TIME,
  UNIX_TIMESTAMP(MIN(FIRST_REFRESH_TIME)) MIN_FIRST_REFRESH_TS,
  UNIX_TIMESTAMP(MAX(LAST_REFRESH_TIME)) MAX_LAST_REFRESH_TS,
  UNIX_TIMESTAMP(MIN(FIRST_CHANGE_TIME)) MIN_FIRST_CHANGE_TS,
  UNIX_TIMESTAMP(MAX(LAST_CHANGE_TIME)) MAX_LAST_CHANGE_TS,
  AVG(TIMESTAMPDIFF(MICROSECOND, FIRST_REFRESH_TIME, LAST_REFRESH_TIME)) AVG_REFRESH_TIME,
  MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_REFRESH_TIME, LAST_REFRESH_TIME)) MAX_REFRESH_TIME,
  MIN(TIMESTAMPDIFF(MICROSECOND, FIRST_REFRESH_TIME, LAST_REFRESH_TIME)) MIN_REFRESH_TIME,
  AVG(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) AVG_CHANGE_TIME,
  MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) MAX_CHANGE_TIME,
  MIN(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) MIN_CHANGE_TIME,
  SUM(OUTPUT_ROWS) TOTAL_OUTPUT_ROWS,
  (MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) - MIN(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME))) / MAX(TIMESTAMPDIFF(MICROSECOND, FIRST_CHANGE_TIME, LAST_CHANGE_TIME)) SKEWNESS,
  SUM(STARTS) TOTAL_RESCAN_TIMES,
  SVR_IP,
  SVR_PORT,
  MAX(OTHERSTAT_1_VALUE) MAX_STAT_1,
  MIN(OTHERSTAT_1_VALUE) MIN_STAT_1,
  AVG(OTHERSTAT_1_VALUE) AVG_STAT_1,
  MAX(OTHERSTAT_2_VALUE) MAX_STAT_2,
  MIN(OTHERSTAT_2_VALUE) MIN_STAT_2,
  AVG(OTHERSTAT_2_VALUE) AVG_STAT_2,
  MAX(OTHERSTAT_3_VALUE) MAX_STAT_3,
  MIN(OTHERSTAT_3_VALUE) MIN_STAT_3,
  AVG(OTHERSTAT_3_VALUE) AVG_STAT_3,
  MAX(OTHERSTAT_4_VALUE) MAX_STAT_4,
  MIN(OTHERSTAT_4_VALUE) MIN_STAT_4,
  AVG(OTHERSTAT_4_VALUE) AVG_STAT_4,
  MAX(OTHERSTAT_5_VALUE) MAX_STAT_5,
  MIN(OTHERSTAT_5_VALUE) MIN_STAT_5,
  AVG(OTHERSTAT_5_VALUE) AVG_STAT_5,
  MAX(OTHERSTAT_6_VALUE) MAX_STAT_6,
  MIN(OTHERSTAT_6_VALUE) MIN_STAT_6,
  AVG(OTHERSTAT_6_VALUE) AVG_STAT_6,
  TRUNCATE(AVG(DB_TIME)/1000000000.0/2.5, 4) MY_DB_TIME,
  TRUNCATE(AVG(DB_TIME-USER_IO_WAIT_TIME)/1000000000.0/2.5, 4) MY_CPU_TIME,
  TRUNCATE(AVG(USER_IO_WAIT_TIME)/1000000000.0/2.5, 4) MY_IO_TIME
from
  oceanbase.gv$sql_plan_monitor
where
  trace_id = 'Y4C360B9E1F4D-0005F192D9891CC0-0-0'
GROUP BY
  PLAN_LINE_ID,PLAN_OPERATION,SVR_IP,SVR_PORT
ORDER BY
  PLAN_LINE_ID ASC, MAX_CHANGE_TIME ASC, SVR_IP, SVR_PORT;

Thread LEVEL
select
  PLAN_DEPTH,/*0*/
  SVR_IP,
  SVR_PORT,
  PROCESS_NAME,
  PLAN_LINE_ID,
  PLAN_OPERATION, /*5*/
  OUTPUT_ROWS,
  STARTS RESCAN_TIMES,
  FIRST_REFRESH_TIME,
  LAST_REFRESH_TIME,
  FIRST_CHANGE_TIME,/*10*/
  LAST_CHANGE_TIME,
  UNIX_TIMESTAMP(FIRST_REFRESH_TIME) FIRST_REFRESH_TS,
  UNIX_TIMESTAMP(LAST_REFRESH_TIME) LAST_REFRESH_TS,
  UNIX_TIMESTAMP(LAST_REFRESH_TIME) - UNIX_TIMESTAMP(FIRST_REFRESH_TIME) REFRESH_TS,
  UNIX_TIMESTAMP(FIRST_CHANGE_TIME) FIRST_CHANGE_TS, /*15*/
  UNIX_TIMESTAMP(LAST_CHANGE_TIME) LAST_CHANGE_TS,
  UNIX_TIMESTAMP(LAST_CHANGE_TIME) - UNIX_TIMESTAMP(FIRST_CHANGE_TIME) CHANGE_TS,
  OTHERSTAT_1_ID,
  OTHERSTAT_1_VALUE,
  OTHERSTAT_2_ID, /*20*/
  OTHERSTAT_2_VALUE,
  OTHERSTAT_3_ID,
  OTHERSTAT_3_VALUE,
  OTHERSTAT_4_ID,
  OTHERSTAT_4_VALUE, /*25*/
  OTHERSTAT_5_ID,
  OTHERSTAT_5_VALUE,
  OTHERSTAT_6_ID,
  OTHERSTAT_6_VALUE,
  TRUNCATE((DB_TIME)/1000000000.0/2.5, 4) MY_DB_TIME,
  TRUNCATE((DB_TIME-USER_IO_WAIT_TIME)/1000000000.0/2.5, 4) MY_CPU_TIME,
  TRUNCATE((USER_IO_WAIT_TIME)/1000000000.0/2.5, 4) MY_IO_TIME
from
  oceanbase.gv$sql_plan_monitor
where
    trace_id = 'Y4C360B9E1F4D-0005F192D9891CC0-0-0'
ORDER BY
  PLAN_LINE_ID ASC, SVR_IP, SVR_PORT, CHANGE_TS, PROCESS_NAME ASC;