OceanBaseは多次元の実行計画診断機能を提供し、ユーザーがSQLのロジックおよび物理的実行計画をリアルタイムで分析するのに役立ちます。本記事では、DBMS_XPLAN、GV$OB_PLAN_CACHE_PLAN_EXPLAIN、GV$SQL_PLAN_MONITORを使用して実行計画を照会する方法と、具体的な操作手順を例を交えて説明します。
DBMS_XPLANシステムパッケージ:ロジック実行計画を照会するために使用されます。GV$OB_PLAN_CACHE_PLAN_EXPLAINビュー:特定のSQL文の計画キャッシュ内の物理的実行計画を照会するために使用されます。GV$SQL_PLAN_MONITORビュー:テナントレベルの実行計画関連情報を取得するために使用されます。
ロジック実行計画の診断
大規模なSQL文を実行する際、現在の接続が長時間にわたって実行されている場合、実行計画や実行プロセスなど、クエリの実行状況を把握する必要があります。このような状況では、現在のセッションが大規模なSQL文に占有されているため、新しい接続を開き、SHOW PROCESSLIST コマンドでその大規模なSQL文が属するセッションを特定し、session_id および DBMS_XPLAN システムパッケージの DISPLAY_ACTIVE_SESSION_PLAN サブルーチンを使用して、大規模なSQL文の実行詳細を表示する必要があります。
Sessionの実行計画をリアルタイムで確認する
SQLの実行が長時間に及び、現在のSessionが占有されている場合は、以下の手順で実行パスを診断できます。
ステップ1:スローSQLを実行する
-- 例:大きなテーブルのデカルト積演算を実行する
obclient> SELECT COUNT(*) FROM TABLE(GENERATOR(100000)) A, TABLE(GENERATOR(10000)) B;
+------------+
| COUNT(*) |
+------------+
| 1000000000 |
+------------+
1 row in set
ステップ2:ターゲットセッションIDを取得する
別のセッションに接続し、SHOW PROCESSLIST コマンドを使用して実行中のSQLのセッションIDを検索します。
SHOW PROCESSLIST;
+------------+------+--------------------+------+---------+------+--------+---------------------------------------------------------------------------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |
+------------+------+--------------------+------+---------+------+--------+---------------------------------------------------------------------------+
| 3221675847 | SYS | 11.x.x.44:57841 | SYS | Query | 0 | ACTIVE | show processlist |
| 3221668463 | SYS | 11.x.x.44:57530 | SYS | Query | 2 | ACTIVE | select count(*) from table(generator(100000)) A, table(generator(10000))B |
+------------+------+--------------------+------+---------+------+--------+---------------------------------------------------------------------------+
ステップ3:Sessionのリアルタイム計画を表示する
DBMS_XPLANシステムパッケージを使用して、オペレータレベルの実行詳細を取得します。
/* MySQLモードでSession計画の詳細を表示する */
SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(3221668463);
+--------------------------------------------------------------------------------------------------------------------+
| COLUMN_VALUE |
+--------------------------------------------------------------------------------------------------------------------+
| ============================================================================================================== |
| |ID|OPERATOR |NAME|EST.ROWS|EST.TIME(us)|REAL.ROWS|REAL.TIME(us)|IO TIME(us)|CPU TIME(us)| |
| -------------------------------------------------------------------------------------------------------------- |
| |0 |SCALAR GROUP BY | |1 |1794 |0 |0 |0 |0 | |
| |1 |└─NESTED-LOOP JOIN CARTESIAN | |39601 |1076 |0 |0 |0 |0 | |
| |2 | ├─FUNCTION_TABLE |A |199 |1 |0 |0 |0 |0 | |
| |3 | └─MATERIAL | |199 |80 |0 |0 |0 |0 | |
| |4 | └─FUNCTION_TABLE |B |199 |1 |0 |0 |0 |0 | |
| ============================================================================================================== |
| Outputs & filters: |
| ------------------------------------- |
| 0 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256 |
| group(nil), agg_func([T_FUN_COUNT(*)]) |
| 1 - output(nil), filter(nil), rowset=256 |
| conds(nil), nl_params_(nil), use_batch=false |
| 2 - output(nil), filter(nil) |
| value(GENERATOR(cast(:0, BIGINT(-1, 0)))) |
| 3 - output(nil), filter(nil), rowset=256 |
| 4 - output(nil), filter(nil) |
| value(GENERATOR(cast(:1, BIGINT(-1, 0)))) |
+--------------------------------------------------------------------------------------------------------------------+
/* OracleモードでSession計画の詳細を表示する */
SELECT * FROM TABLE (DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(3221668463));
+--------------------------------------------------------------------------------------------------------------------+
| COLUMN_VALUE |
+--------------------------------------------------------------------------------------------------------------------+
| ============================================================================================================== |
| |ID|OPERATOR |NAME|EST.ROWS|EST.TIME(us)|REAL.ROWS|REAL.TIME(us)|IO TIME(us)|CPU TIME(us)| |
| -------------------------------------------------------------------------------------------------------------- |
| |0 |SCALAR GROUP BY | |1 |1794 |0 |0 |0 |0 | |
| |1 |└─NESTED-LOOP JOIN CARTESIAN | |39601 |1076 |0 |0 |0 |0 | |
| |2 | ├─FUNCTION_TABLE |A |199 |1 |0 |0 |0 |0 | |
| |3 | └─MATERIAL | |199 |80 |0 |0 |0 |0 | |
| |4 | └─FUNCTION_TABLE |B |199 |1 |0 |0 |0 |0 | |
| ============================================================================================================== |
| Outputs & filters: |
| ------------------------------------- |
| 0 - output([T_FUN_COUNT(*)]), filter(nil), rowset=256 |
| group(nil), agg_func([T_FUN_COUNT(*)]) |
| 1 - output(nil), filter(nil), rowset=256 |
| conds(nil), nl_params_(nil), use_batch=false |
| 2 - output(nil), filter(nil) |
| value(GENERATOR(cast(:0, BIGINT(-1, 0)))) |
| 3 - output(nil), filter(nil), rowset=256 |
| 4 - output(nil), filter(nil) |
| value(GENERATOR(cast(:1, BIGINT(-1, 0)))) |
+--------------------------------------------------------------------------------------------------------------------+
その他のロジックプランの照会方法
OceanBaseはまた、EXPLAIN PLANツールによって生成された静的実行計画を照会するための(G)V$OB_SQL_PLANビューも提供しています。例えば:
obclient> SELECT * FROM oceanbase.V$OB_SQL_PLAN WHERE TENANT_ID = effective_tenant_id();
obclient> SELECT * FROM oceanbase.V$OB_SQL_PLAN WHERE SVR_IP=host_ip() AND SVR_PORT=rpc_port();
ただし、DBMS_XPLANシステムパッケージの使用を推奨します。
DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLANは、実行中のSQLの動的計画を直接取得でき、リアルタイムのパフォーマンスデータ(REAL.ROWS、CPU_TIMEなど)が含まれます。 GV$OB_SQL_PLANはEXPLAINによって生成された静的計画のみを格納しており、実際の実行時の動的変化を反映することはできません。
物理実行計画の診断
EXPLAIN コマンドを使用すると、現在のオプティマイザーが生成した実行計画を表示できます。しかし、統計情報の変化やユーザーセッション変数の設定変更などにより、このSQL文が計画キャッシュ内で実際に対応する計画は、EXPLAIN の結果と異なる場合があります。このSQL文がシステム内で実際に使用される実行計画を特定するためには、計画キャッシュ内の物理実行計画をさらに分析する必要があります。
プランキャッシュを通じて物理プランを照会する
OceanBaseデータベースでは、各サーバーのプランキャッシュは独立しています。物理実行プランはV$OB_PLAN_CACHE_PLAN_EXPLAINビューに格納されており、まずV$OB_PLAN_CACHE_PLAN_STATを使用して該当サーバー上のプランキャッシュを照会し、tenant_idと照会対象のSQL文字列(あいまい一致を使用可能)を提供します。これにより、そのSQLがプランキャッシュ内で対応するplan_idを照会し、さらにそのSQLのプランキャッシュ内の物理実行プランを表示します。
V$OB_PLAN_CACHE_PLAN_EXPLAINビューのクエリ定義は以下のとおりです:
SELECT * FROM oceanbase.V$OB_PLAN_CACHE_PLAN_EXPLAIN WHERE TENANT_ID = tenant_id() AND PLAN_ID = plan_id();
ステップ1:クエリ計画キャッシュからplan_idを取得する
obclient> SELECT * FROM oceanbase.V$OB_PLAN_CACHE_PLAN_STAT WHERE tenant_id= 1001 AND STATEMENT LIKE 'INSERT INTO T1 VALUES%'\G
出力結果:
***************************1. row ***************************
TENANT_ID: 1001
SVR_IP: xxx.xxx.xxx.xxx
SVR_PORT: 2882
PLAN_ID: 9228
SQL_ID: 5AB7C2585394BAD0EE04A39099728804
TYPE: 1
IS_BIND_SENSITIVE: 0
IS_BIND_AWARE: 0
DB_ID: 201001
STATEMENT: insert into t1 values(?)
QUERY_SQL: insert into t1 values(1)
SPECIAL_PARAMS:
PARAM_INFOS: {0,0,0,0,5}
SYS_VARS: 45,45,12582912,2,4,1,0,0,3,1,0,1,10485760,1,0,BINARY,BINARY,AL32UTF8,AL16UTF16,BYTE,FALSE,1,100,64,200,0,13,NULL,1,1,1,1,1,0,0,0,1000,BLOOM_FILTER, RANGE,IN
CONFIGS: 3,1,1,0,1,1,1,0,30,17180000256,
PLAN_HASH: 3290318591324336132
FIRST_LOAD_TIME: 2023-07-04 16:36:51.558406
SCHEMA_VERSION: 1688459804400976
LAST_ACTIVE_TIME: 2023-07-04 16:36:51.562434
AVG_EXE_USEC: 179697
SLOWEST_EXE_TIME: 2023-07-04 16:36:51.562434
SLOWEST_EXE_USEC: 179697
SLOW_COUNT: 0
HIT_COUNT: 0
PLAN_SIZE: 102616
EXECUTIONS: 1
DISK_READS: 9
DIRECT_WRITES: 0
BUFFER_GETS: 9
APPLICATION_WAIT_TIME: 0
CONCURRENCY_WAIT_TIME: 0
USER_IO_WAIT_TIME: 0
ROWS_PROCESSED: 1
ELAPSED_TIME: 179697
CPU_TIME: 177641
LARGE_QUERYS: 0
DELAYED_LARGE_QUERYS: 0
DELAYED_PX_QUERYS: 0
OUTLINE_VERSION: 0
OUTLINE_ID: -1
OUTLINE_DATA: /*+BEGIN_OUTLINE_DATA USE_DISTRIBUTED_DML(@"INS$1") OPTIMIZER_FEATURES_ENABLE('4.0.0.0') END_OUTLINE_DATA*/
ACS_SEL_INFO:
TABLE_SCAN: 0
EVOLUTION: 0
EVO_EXECUTIONS: 0
EVO_CPU_TIME: 0
TIMEOUT_COUNT: 0
PS_STMT_ID: -1
SESSID: 0
TEMP_TABLES:
IS_USE_JIT: 0
OBJECT_TYPE: SQL_PLAN
HINTS_INFO:
HINTS_ALL_WORKED: 1
PL_SCHEMA_ID: 0
IS_BATCHED_MULTI_STMT: 0
RULE_NAME:
1 row in set
ステップ2:物理実行計画を表示する
plan_id を取得した後、ユーザーは tenant_id と plan_id を使用して V$OB_PLAN_CACHE_PLAN_EXPLAIN ビューにアクセスし、実行計画に関する情報を照会できます。
注意
ここに表示される計画は物理実行計画であり、演算子の命名は EXPLAIN で表示される論理実行計画とは異なります。
obclient> SELECT * FROM oceanbase.V$OB_PLAN_CACHE_PLAN_EXPLAIN
WHERE tenant_id = 1001 AND plan_id = 9228;
出力例:
+-----------+----------------+----------+---------+------------+--------------+------------------+------+------+------+----------+
| TENANT_ID | SVR_IP | SVR_PORT | PLAN_ID | PLAN_DEPTH | PLAN_LINE_ID | OPERATOR | NAME | ROWS | COST | PROPERTY |
+-----------+----------------+----------+---------+------------+--------------+------------------+------+------+------+----------+
| 1001 | xxx.xxx.xxx.xxx| 2882 | 9228 | 0 | 0 | PHY_INSERT | NULL | 1 | 12 | NULL |
| 1001 | xxx.xxx.xxx.xxx| 2882 | 9228 | 1 | 1 | PHY_EXPR_VALUES | NULL | 1 | 0 | NULL |
+-----------+----------------+----------+---------+------------+--------------+------------------+------+------+------+----------+
2 rows in set
リアルタイム演算子レベルのパフォーマンスモニタリング(V4.0以降)
OceanBaseデータベースV4.0バージョンから、各実行演算子の詳細なパフォーマンスメトリクスを追跡するためのリアルタイムSQL Plan Monitor機能がサポートされています。これには、最初の行の返却時間、出力行数、HASH競合率、ディスクへの書き込み回数などが含まれます。ユーザーは、GV$SQL_PLAN_MONITORテナントレベルのビューを照会することで、演算子の行出力数、演算子の開始および終了時刻、各実行スレッドによる演算子の実行状態など、実行計画に関する情報を取得できます。
構成と設定
SQL Plan Monitor機能の有効化:
ALTER SYSTEM SET enable_perf_event = true; -- デフォルトで有効
SQL Plan Monitorが有効になると、以下のSQL文がSQL Plan Monitorに記録されます:
/*+ MONITOR */ヒントを明示的に指定したクエリ。- パラレルデータ変更ステートメント(PDML)を実行したクエリ。
- クエリ内で最初に実行時間が3秒を超えた演算子。
モニタリングデータのクエリ
GV$SQL_PLAN_MONITORビューのOTHERSTAT_?_IDフィールドとOTHERSTAT_?_VALUEフィールドは、演算子固有のパフォーマンスデータを記録するために使用されます。各フィールドが実際に記録するデータ名は、IDによって表されます。IDが対応する具体的な意味については、V$SQL_MONITOR_STATNAMEビューで照会する必要があります。
obclient [SYS]> DESC V$SQL_MONITOR_STATNAME;
+-------------+---------------+------+------+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------------+---------------+------+------+---------+-------+
| CON_ID | NUMBER | NO | NULL | NULL | NULL |
| ID | NUMBER | NO | NULL | NULL | NULL |
| GROUP_ID | NUMBER | NO | NULL | NULL | NULL |
| NAME | VARCHAR2(40) | NO | NULL | NULL | NULL |
| DESCRIPTION | VARCHAR2(200) | NO | NULL | NULL | NULL |
| TYPE | NUMBER | NO | NULL | NULL | NULL |
| FLAGS | NUMBER | NO | NULL | NULL | NULL |
+-------------+---------------+------+------+---------+-------+
7 rows in set
以下の具体的な例では、GV$SQL_PLAN_MONITORおよびV$SQL_MONITOR_STATNAMEビューを使用して実行計画情報を照会する方法を示します。
ステップ1:trace_idを取得する
obclient> SELECT trace_id FROM GV$OB_SQL_AUDIT
WHERE query_sql LIKE '%TPCH_%' ORDER BY REQUEST_TIME DESC LIMIT 1;
出力例:
+-----------------------------------+
| trace_id |
+-----------------------------------+
| Y4C360A65A34F-0005A9BD39CF5C74 |
+-----------------------------------+
1 row in set
ステップ2:演算子のパフォーマンスを分析する
GV$SQL_PLAN_MONITORビューを照会して、実行計画の概要または詳細を取得します。
SELECT
PROCESS_NAME,
PLAN_LINE_ID,
PLAN_OPERATION,
COUNT(*) PARALLEL,
AVG(LAST_REFRESH_TIME - FIRST_REFRESH_TIME) AVG_REFRESH_TIME,
MAX(LAST_REFRESH_TIME - FIRST_REFRESH_TIME) MAX_REFRESH_TIME,
MIN(LAST_REFRESH_TIME - FIRST_REFRESH_TIME) MIN_REFRESH_TIME,
AVG(LAST_CHANGE_TIME - FIRST_CHANGE_TIME) AVG_CHANGE_TIME,
MAX(LAST_CHANGE_TIME - FIRST_CHANGE_TIME) MAX_CHANGE_TIME,
MIN(LAST_CHANGE_TIME - FIRST_CHANGE_TIME) MIN_CHANGE_TIME,
SUM(OUTPUT_ROWS) TOTAL_OUTPUT_ROWS,
SUM(STARTS) TOTAL_RESCAN_TIMES
FROM
oceanbase.GV$SQL_PLAN_MONITOR
WHERE
trace_id = 'Y4C360A65A34F-0005A9BD39CF5C74'
GROUP BY
PLAN_LINE_ID
ORDER BY
PLAN_LINE_ID ASC;
+--------------+--------------+------------------------+----------+------------------+------------------+------------------+-----------------+-----------------+-----------------+-------------------+--------------------+
| PROCESS_NAME | PLAN_LINE_ID | PLAN_OPERATION | PARALLEL | AVG_REFRESH_TIME | MAX_REFRESH_TIME | MIN_REFRESH_TIME | AVG_CHANGE_TIME | MAX_CHANGE_TIME | MIN_CHANGE_TIME | TOTAL_OUTPUT_ROWS | TOTAL_RESCAN_TIMES |
+--------------+--------------+------------------------+----------+------------------+------------------+------------------+-----------------+-----------------+-----------------+-------------------+--------------------+
| 16755 | 0 | PHY_PX_FIFO_COORD | 1 | 0.0137190000 | 0.013719 | 0.013719 | 0.0063460000 | 0.006346 | 0.006346 | 300 | 0 |
| 16883 | 1 | PHY_PX_REDUCE_TRANSMIT | 3 | 0.0031260000 | 0.005230 | 0.001036 | 0.0010606667 | 0.003182 | 0.000000 | 300 | 0 |
| 16883 | 2 | PHY_HASH_JOIN | 3 | 0.0031260000 | 0.005230 | 0.001036 | 0.0010606667 | 0.003182 | 0.000000 | 300 | 0 |
| 16883 | 3 | PHY_PX_FIFO_RECEIVE | 3 | 0.0031260000 | 0.005230 | 0.001036 | 0.0000000000 | 0.000000 | 0.000000 | 75 | 0 |
| 16889 | 4 | PHY_PX_DIST_TRANSMIT | 3 | 0.0024853333 | 0.003176 | 0.002140 | 0.0003526667 | 0.001058 | 0.000000 | 25 | 0 |
| 16889 | 5 | PHY_GRANULE_ITERATOR | 3 | 0.0024853333 | 0.003176 | 0.002140 | 0.0003526667 | 0.001058 | 0.000000 | 25 | 0 |
| 16889 | 6 | PHY_TABLE_SCAN | 3 | 0.0024853333 | 0.003176 | 0.002140 | 0.0003526667 | 0.001058 | 0.000000 | 25 | 1 |
| 16883 | 7 | PHY_GRANULE_ITERATOR | 3 | 0.0031260000 | 0.005230 | 0.001036 | 0.0013980000 | 0.004194 | 0.000000 | 300 | 0 |
| 16883 | 8 | PHY_TABLE_SCAN | 3 | 0.0031260000 | 0.005230 | 0.001036 | 0.0013980000 | 0.004194 | 0.000000 | 300 | 1 |
+--------------+--------------+------------------------+----------+------------------+------------------+------------------+-----------------+-----------------+-----------------+-------------------+--------------------+
9 rows in set
GV$SQL_PLAN_MONITORビューを使用して、実行計画の詳細を照会することもできます。
SELECT
SVR_IP,
SVR_PORT,
PROCESS_NAME,
PLAN_LINE_ID,
PLAN_OPERATION,
FIRST_REFRESH_TIME,
LAST_REFRESH_TIME,
LAST_REFRESH_TIME - FIRST_REFRESH_TIME REFRESH_TIME,
FIRST_CHANGE_TIME,
LAST_CHANGE_TIME,
LAST_CHANGE_TIME - FIRST_CHANGE_TIME CHANGE_TIME,
OUTPUT_ROWS,
STARTS RESCAN_TIMES
FROM
oceanbase.GV$SQL_PLAN_MONITOR
WHERE
trace_id = 'Y4C360A65A34F-0005A9BD39CF5C74'
ORDER BY
PLAN_LINE_ID ASC, PROCESS_NAME ASC, FIRST_REFRESH_TIME ASC;
+---------------+----------+--------------+--------------+------------------------+----------------------------+----------------------------+--------------+----------------------------+----------------------------+-------------+-------------+--------------+
| SVR_IP | SVR_PORT | PROCESS_NAME | PLAN_LINE_ID | PLAN_OPERATION | FIRST_REFRESH_TIME | LAST_REFRESH_TIME | REFRESH_TIME | FIRST_CHANGE_TIME | LAST_CHANGE_TIME | CHANGE_TIME | OUTPUT_ROWS | RESCAN_TIMES |
+---------------+----------+--------------+--------------+------------------------+----------------------------+----------------------------+--------------+----------------------------+----------------------------+-------------+-------------+--------------+
| 10.10.1.1 | 19510 | 16755 | 0 | PHY_PX_FIFO_COORD | 2020-07-06 11:18:34.207460 | 2020-07-06 11:18:34.221179 | 0.013719 | 2020-07-06 11:18:34.214833 | 2020-07-06 11:18:34.221179 | 0.006346 | 300 | 0 |
| 10.10.1.2 | 19510 | 16882 | 1 | PHY_PX_REDUCE_TRANSMIT | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.216951 | 0.005230 | 2020-07-06 11:18:34.213769 | 2020-07-06 11:18:34.216951 | 0.003182 | 300 | 0 |
| 10.10.1.3 | 19510 | 16883 | 1 | PHY_PX_REDUCE_TRANSMIT | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.212757 | 0.001036 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.4 | 19510 | 16891 | 1 | PHY_PX_REDUCE_TRANSMIT | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.214833 | 0.003112 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.5 | 19510 | 16882 | 2 | PHY_HASH_JOIN | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.216951 | 0.005230 | 2020-07-06 11:18:34.213769 | 2020-07-06 11:18:34.216951 | 0.003182 | 300 | 0 |
| 10.10.1.6 | 19510 | 16883 | 2 | PHY_HASH_JOIN | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.212757 | 0.001036 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.7 | 19510 | 16891 | 2 | PHY_HASH_JOIN | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.214833 | 0.003112 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.8 | 19510 | 16882 | 3 | PHY_PX_FIFO_RECEIVE | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.216951 | 0.005230 | 2020-07-06 11:18:34.212757 | 2020-07-06 11:18:34.212757 | 0.000000 | 25 | 0 |
| 10.10.1.9 | 19510 | 16883 | 3 | PHY_PX_FIFO_RECEIVE | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.212757 | 0.001036 | 2020-07-06 11:18:34.212757 | 2020-07-06 11:18:34.212757 | 0.000000 | 25 | 0 |
| 10.10.1.10 | 19510 | 16891 | 3 | PHY_PX_FIFO_RECEIVE | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.214833 | 0.003112 | 2020-07-06 11:18:34.213769 | 2020-07-06 11:18:34.213769 | 0.000000 | 25 | 0 |
| 10.10.1.11 | 19510 | 16888 | 4 | PHY_PX_DIST_TRANSMIT | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.212757 | 0.003176 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.12 | 19510 | 16889 | 4 | PHY_PX_DIST_TRANSMIT | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.211721 | 0.002140 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.13 | 19510 | 16890 | 4 | PHY_PX_DIST_TRANSMIT | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.211721 | 0.002140 | 2020-07-06 11:18:34.210663 | 2020-07-06 11:18:34.211721 | 0.001058 | 25 | 0 |
| 10.10.1.14 | 19510 | 16888 | 5 | PHY_GRANULE_ITERATOR | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.212757 | 0.003176 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.15 | 19510 | 16889 | 5 | PHY_GRANULE_ITERATOR | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.211721 | 0.002140 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.16 | 19510 | 16890 | 5 | PHY_GRANULE_ITERATOR | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.211721 | 0.002140 | 2020-07-06 11:18:34.210663 | 2020-07-06 11:18:34.211721 | 0.001058 | 25 | 0 |
| 10.10.1.17 | 19510 | 16888 | 6 | PHY_TABLE_SCAN | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.212757 | 0.003176 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.18 | 19510 | 16889 | 6 | PHY_TABLE_SCAN | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.211721 | 0.002140 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.19 | 19510 | 16890 | 6 | PHY_TABLE_SCAN | 2020-07-06 11:18:34.209581 | 2020-07-06 11:18:34.211721 | 0.002140 | 2020-07-06 11:18:34.210663 | 2020-07-06 11:18:34.211721 | 0.001058 | 25 | 1 |
| 10.10.1.20 | 19510 | 16882 | 7 | PHY_GRANULE_ITERATOR | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.216951 | 0.005230 | 2020-07-06 11:18:34.212757 | 2020-07-06 11:18:34.216951 | 0.004194 | 300 | 0 |
| 10.10.1.21 | 19510 | 16883 | 7 | PHY_GRANULE_ITERATOR | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.212757 | 0.001036 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.22 | 19510 | 16891 | 7 | PHY_GRANULE_ITERATOR | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.214833 | 0.003112 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.23 | 19510 | 16882 | 8 | PHY_TABLE_SCAN | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.216951 | 0.005230 | 2020-07-06 11:18:34.212757 | 2020-07-06 11:18:34.216951 | 0.004194 | 300 | 1 |
| 10.10.1.24 | 19510 | 16883 | 8 | PHY_TABLE_SCAN | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.212757 | 0.001036 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
| 10.10.1.25 | 19510 | 16891 | 8 | PHY_TABLE_SCAN | 2020-07-06 11:18:34.211721 | 2020-07-06 11:18:34.214833 | 0.003112 | 1970-01-01 08:00:00.000000 | 1970-01-01 08:00:00.000000 | 0.000000 | 0 | 0 |
+---------------+----------+--------------+--------------+------------------------+----------------------------+----------------------------+--------------+----------------------------+----------------------------+-------------+-------------+--------------+
25 rows in set
ステップ3:OTHERSTATフィールドの解釈
V$SQL_MONITOR_STATNAME を使用して、OTHERSTAT_?_ID の意味を解析します。
SELECT * FROM oceanbase.V$SQL_MONITOR_STATNAME;
+--------+----+----------+--------------------------+-------------------------------------------------+------+-------+
| CON_ID | ID | GROUP_ID | NAME | DESCRIPTION | TYPE | FLAGS |
+--------+----+----------+--------------------------+-------------------------------------------------+------+-------+
| NULL | 1 | 0 | min hash entry count | element count in shortest hash slot | 0 | 0 |
| NULL | 2 | 0 | max hash entry count | element count in longest hash slot | 0 | 0 |
| NULL | 3 | 0 | total hash entry count | total element count in all slots | 0 | 0 |
| NULL | 4 | 0 | slot size | total hash bucket count | 0 | 0 |
| NULL | 5 | 0 | non-empty bucket count | non-empty hash bucket count | 0 | 0 |
| NULL | 6 | 0 | total row count | total row count building hash table | 0 | 0 |
| NULL | 7 | 0 | total miss count | the total count of dtl loop miss | 0 | 0 |
| NULL | 8 | 0 | total miss count | the total count of dtl loop miss after get data | 0 | 0 |
| NULL | 9 | 0 | hash bucket init size | init hash bucket count | 0 | 0 |
| NULL | 10 | 0 | hash distinct block mode | hash distinct block mode | 0 | 0 |
+--------+----+----------+--------------------------+-------------------------------------------------+------+-------+
10 rows in set
-- そのうちの一つのスニペット情報の例
SVR_IP: xx.xx.xx.xx
SVR_PORT: 19510
PROCESS_NAME: 49361
PLAN_LINE_ID: 2
PLAN_OPERATION: PHY_HASH_JOIN
FIRST_REFRESH_TIME: 2020-07-06 11:57:39.832042
LAST_REFRESH_TIME: 2020-07-06 11:57:39.840455
REFRESH_TIME: 0.008413
FIRST_CHANGE_TIME: 2020-07-06 11:57:39.835199
LAST_CHANGE_TIME: 2020-07-06 11:57:39.839398
CHANGE_TIME: 0.004199
OUTPUT_ROWS: 300
RESCAN_TIMES: 0
OTHERSTAT_1_ID: 1
OTHERSTAT_1_VALUE: 1
OTHERSTAT_2_ID: 2
OTHERSTAT_2_VALUE: 2
OTHERSTAT_3_ID: 3
OTHERSTAT_3_VALUE: 25
OTHERSTAT_4_ID: 4
OTHERSTAT_4_VALUE: 64
OTHERSTAT_5_ID: 5
OTHERSTAT_5_VALUE: 20
OTHERSTAT_6_ID: 6
OTHERSTAT_6_VALUE: 25
サンプル解析:
OTHERSTAT_1_ID = 1→min hash entry count、値は1です。OTHERSTAT_2_ID = 2→max hash entry count、値は25です。
関連ドキュメント
- DISPLAY_ACTIVE_SESSION_PLAN
- ロジック実行計画ビュー - (G)V$OB_SQL_PLAN
- フィジカル実行計画ビュー - V$OB_PLAN_CACHE_PLAN_EXPLAIN
- リアルタイムモニタリングビュー - GV$SQL_PLAN_MONITOR
- OTHERSTATフィールドの説明 - V$SQL_MONITOR_STATNAME |