ユーザーがキャッシュされた実行計画を検索および管理しやすくするため、OceanBaseデータベースは、キャッシュされた実行計画を照会するためのビューをいくつか提供しています。
GV$OB_PLAN_CACHE_PLAN_STAT
GV$OB_PLAN_CACHE_PLAN_STAT ビューは、各実行計画の詳細情報と実行統計情報を記録しており、キャッシュされた各計画についてこのビューに1件のレコードが存在します。主なフィールドとその意味は以下のとおりです:
フィールド |
意味 |
|---|---|
SVR_IP |
キャッシュ計画が存在するデータベースのIPアドレス |
SVR_PORT |
キャッシュ計画が存在するデータベースのポート |
PLAN_ID |
SQL計画のID |
SQL_ID |
SQLのID |
TYPE |
計画タイプ |
QUERY_SQL |
計画生成時の元のSQL文 |
FIRST_LOAD_TIME |
最初に計画が生成されたタイムスタンプ |
AVG_EXE_TIME |
計画の平均実行時間 |
EXECUTIONS |
計画の実行回数 |
CPU_TIME |
計画のすべての実行で消費されたCPU時間 |
OUTLINE_ID |
計画生成時に使用されたアウトラインのID。-1の場合は、バインドされたアウトラインから生成された計画ではないことを示します |
OUTLINE_DATA |
計画に対応するアウトライン情報 |
このビューを利用することで、サーバー内でCPUリソースを多く消費するSQLを特定し、データベースのパフォーマンスを最適化するためのチューニングを行うことができます。
GV$OB_PLAN_CACHE_PLAN_EXPLAIN
GV$OB_PLAN_CACHE_PLAN_EXPLAIN ビューは、プランキャッシュ内の各実行計画の実際の計画形態を記録しています。指定された(IPアドレス、ポート、テナントID、計画ID)の4元組を用いることで、特定の計画のツリー形式の計画形態を照会できます。主なフィールドとその意味は以下のとおりです:
フィールド |
意味 |
|---|---|
PLAN_LINE_ID |
物理演算子のID |
OPERATOR |
物理演算子の名前 |
NAME |
物理演算子がアクセスするテーブル名 |
ROWS |
物理演算子による結果行数の推定値 |
COST |
物理演算子によるコストの推定値 |
PROPERTY |
物理演算子の一部のプロパティ情報 |
以下は、具体的な実行計画を照会する例です。この結果は、OceanBaseデータベースで直接EXPLAINを実行した結果と非常に類似していることがわかります。ただし、ここで照会される計画は、対応するSQLが初めて実行された際のパラメータを使用して生成されたものであるため、同一のSQLをEXPLAINした場合でも、その結果が GV$OB_PLAN_CACHE_PLAN_EXPLAIN で照会された結果と一致しない場合があります。そのような場合は、プランキャッシュの不良事例に遭遇している可能性があります。安定した計画を固定するために、プランバインディングを検討する必要があるかもしれません。
select plan_line_id, operator, name, rows, cost
from oceanbase.gv$ob_plan_cache_plan_explain
where ip = 'xx.xx.xx.xx'
and port = 30042
and tenant_id = 1001
and plan_id = 248;
+--------------+------------------------+--------------+---------+----------+
| plan_line_id | operator | name | rows | cost |
+--------------+------------------------+--------------+---------+----------+
| 0 | PHY_SORT | NULL | 6 | 16522 |
| 1 | PHY_HASH_GROUP_BY | NULL | 6 | 16506 |
| 2 | PHY_TABLE_SCAN | lineitem | 11473 | 6597 |
+--------------+------------------------+--------------+---------+----------+