SQLの最適化は時間がかかるため、繰り返し実行することを避けるために、生成された計画はPlan Cacheに格納され、次回実行時には直接Plan Cacheから取得します。各テナントは各ノード上に独立したPlan Cacheを持ち、そのノード上で処理されたSQL Planをキャッシュします。
Plan Cache関連ビューには、Plan Cacheの統計情報、実行統計の統計情報、および計画情報が含まれており、これらのビューのデータはすべてPlan Cacheから取得されます。関連ビューは以下のとおりです:
GV$OB_PLAN_CACHE_STAT:各テナントは各ノード上に独立したPlan Cacheを持ち、そのノード上で処理されたSQL Planをキャッシュします。このビューは各Plan Cacheの統計情報を記録しており、各Plan Cacheについて1件のレコードがあります。GV$OB_PLAN_CACHE_PLAN_EXPLAIN:Plan Cache内の計画のオペレーター(Operator)情報を記録します。各オペレーターについて1件のレコードがあります。GV$OB_PLAN_CACHE_PLAN_STAT:Plan Cache内の計画の詳細情報および実行統計情報を記録します。各計画について1件のレコードがあります。
GV$OB_PLAN_CACHE_PLAN_EXPLAIN ビューは実行計画の詳細情報を記録しており、主なフィールドの説明は以下のとおりです:
TENANT_ID:テナントID。SVR_IP:ノードIP。PLAN_ID:実行計画ID。PLAN_DEPTH:Operatorの深さ。OPERATOR:Operatorの名前。NAME:Operatorに対応するテーブル名。ROWS:推定された結果行数。COST:推定されたコスト。PROPERTY:Operatorの詳細情報。
注意
GV$OB_PLAN_CACHE_PLAN_EXPLAINビューをクエリする際は、TENANT_ID、SVR_IP、SVR_PORT、PLAN_IDの等価条件を指定する必要があります。指定しない場合、クエリ結果は空になります。V$OB_PLAN_CACHE_PLAN_EXPLAINビューをクエリする際は、TENANT_ID、PLAN_IDの等価条件を指定する必要があります。指定しない場合、クエリ結果は空になります。
例えば、以下のステートメントは実行計画を示しています:
obclient> select * from GV$OB_PLAN_CACHE_PLAN_EXPLAIN where tenant_id=1 and svr_ip='xx.xx.xx.xx' and svr_port=2882 and plan_id=349;
+-----------+-------------+----------+---------+------------+--------------+----------------------+--------------+------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| TENANT_ID | SVR_IP | SVR_PORT | PLAN_ID | PLAN_DEPTH | PLAN_LINE_ID | OPERATOR | NAME | ROWS | COST | PROPERTY |
+-----------+-------------+----------+---------+------------+--------------+----------------------+--------------+------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | xx.xx.xx.xx | 2882 | 349 | 0 | 0 | PHY_DIRECT_RECEIVE | NULL | 1 | 6 | NULL |
| 1 | xx.xx.xx.xx | 2882 | 349 | 1 | 1 | PHY_DIRECT_TRANSMIT | NULL | 1 | 5 | NULL |
| 1 | xx.xx.xx.xx | 2882 | 349 | 2 | 2 | PHY_TABLE_SCAN | __all_server | 1 | 2 | table_rows:6, physical_range_rows:1, logical_range_rows:1, index_back_rows:0, output_rows:1, est_method:default_stat, avaiable_index_name[__all_server] |
+-----------+-------------+----------+---------+------------+--------------+----------------------+--------------+------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.04 sec)
GV$OB_PLAN_CACHE_PLAN_STAT ビューは、Plan Cache内の計画の詳細情報および実行統計情報を記録します。各計画について1件のレコードがあります。
TENANT_ID:テナントID。SVR_IP:ノードIP。PLAN_ID:実行計画ID。GV$OB_SQL_AUDITビューのPLAN_IDフィールドに対応します。SQL_ID:SQL ID。GV$OB_SQL_AUDITビューのSQL_IDフィールドに対応します。TYPE:実行計画のタイプ。1はローカル計画、2はリモート計画、3は分散計画を表します。STATEMENT:パラメータ化されたSQL文。QUERY_SQL:最初にプランをロードした際の元のSQL文。FIRST_LOAD_TIME:初回ロード時間。SCHEMA_VERSION:スキーマバージョン番号。LAST_ACTIVE_TIME:最終実行時間。AVG_EXE_USEC:平均実行時間。SLOWEST_EXE_TIME:最も遅い実行のタイムスタンプ。SLOWEST_EXE_USEC:最も遅い実行の時間消費量。SLOW_COUNT:スロークエリと判断された回数。しきい値はクラスタ構成パラメータtrace_log_slow_query_watermarkで制御されます。HIT_COUNT:ヒット回数。LARGE_QUERYS:大規模クエリと判断された回数。しきい値はクラスタ構成パラメータlarge_query_thresholdで制御されます。DELAYED_LARGE_QUERYS:大規模クエリと判断され、大規模クエリキューに投入された回数。TIMEOUT_COUNT:タイムアウト回数。EXECUTIONS:実行回数。DISK_READS:すべての物理読み取り回数。DIRECT_WRITES:すべてのディスク書き込み回数。BUFFER_GETS:すべての論理読み取り回数。APPLICATION_WAIT_TIME:すべてのapplication系イベントの実行にかかった合計時間。CONCURRENCY_WAIT_TIME:すべてのconcurrency系イベントの実行にかかった合計時間。USER_IO_WAIT_TIME:すべてのuser_io系イベントの実行にかかった合計時間。ROWS_PROCESSED:選択結果の行数またはテーブル変更の行数。ELAPSED_TIME:リクエスト受信から実行終了までにかかった時間。CPU_TIME:すべての実行で消費されたCPU時間。OUTLINE_ID:ユーザー作成のアウトラインIDにヒットしたかどうか。-1はアウトラインバインディングによって生成されたプランではないことを示します。OUTLINE_DATA:プランに対応するアウトライン情報。TABLE_SCAN:このクエリが主キースキャンであるかどうか。EVOLUTION:この実行計画が進化中であるかどうか。EVO_EXECUTIONS:進化回数。PS_STMT_ID:プリペアドステートメントのID。