STL_EXPLAIN
実行するために送信されたクエリの EXPLAIN プランを表示します。
STL_EXPLAIN はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。
注記
STL_EXPLAIN には、メインのプロビジョニング済みクラスターで実行されるクエリのみが含まれます。同時実行スケーリングクラスターやサーバーレス名前空間で実行されるクエリは含まれていません。メインクラスターと、同時実行スケーリングクラスターやサーバーレス名前空間の両方で実行されるクエリの説明プランにアクセスするには、SYS モニタリングビュー SYS_QUERY_EXPLAIN を使用することをお勧めします。SYS モニタリングビューのデータは、使いやすく理解しやすいようにフォーマットされます。
テーブルの列
列名 | データ型 | 説明 |
---|---|---|
userid | integer | エントリを生成したユーザーの ID。 |
query | integer | クエリ ID。クエリ列は、他の各種システムテーブルおよびビューを結合するために使用できます。 |
nodeid | integer | クエリの実行における 1 つ以上のステップに対応するノードの計画ノード識別子。 |
parentid | integer | 親ノードの計画ノード識別子。親ノードには、いくつかの子ノードがあります。例えば、merge join は、結合されたテーブルに対する複数の scan の親です。 |
plannode | character(400) | EXPLAIN の出力のノードテキスト。コンピューティングノードでの実行を参照する計画ノードは、EXPLAIN 出力の先頭に XN が付けられます。 |
info | character(400) | 計画ノードの修飾子およびフィルタ情報。例えば、この列には join の条件と WHERE 句の制限が含まれます。 |
サンプルクエリ
集計 join クエリの次の EXPLAIN 出力について考えます。
explain select avg(datediff(day, listtime, saletime)) as avgwait
from sales, listing where sales.listid = listing.listid;
QUERY PLAN
------------------------------------------------------------------------------
XN Aggregate (cost=6350.30..6350.31 rows=1 width=16)
-> XN Hash Join DS_DIST_NONE (cost=47.08..6340.89 rows=3766 width=16)
Hash Cond: ("outer".listid = "inner".listid)
-> XN Seq Scan on listing (cost=0.00..1924.97 rows=192497 width=12)
-> XN Hash (cost=37.66..37.66 rows=3766 width=12)
-> XN Seq Scan on sales (cost=0.00..37.66 rows=3766 width=12)
(6 rows)
このクエリを実行し、そのクエリ ID が 10 の場合、EXPLAIN コマンドから返される情報のうち同じ種類のものを、STL_EXPLAIN テーブルを使用して確認できます。
select query,nodeid,parentid,substring(plannode from 1 for 30),
substring(info from 1 for 20) from stl_explain
where query=10 order by 1,2;
query| nodeid |parentid| substring | substring
-----+--------+--------+--------------------------------+-------------------
10 | 1 | 0 |XN Aggregate (cost=6717.61..6 |
10 | 2 | 1 | -> XN Merge Join DS_DIST_NO | Merge Cond:("outer"
10 | 3 | 2 | -> XN Seq Scan on lis |
10 | 4 | 2 | -> XN Seq Scan on sal |
(4 rows)
次のクエリについて考えます。
select event.eventid, sum(pricepaid)
from event, sales
where event.eventid=sales.eventid
group by event.eventid order by 2 desc;
eventid | sum
--------+----------
289 | 51846.00
7895 | 51049.00
1602 | 50301.00
851 | 49956.00
7315 | 49823.00
...
このクエリの ID が 15 の場合、次のシステムビュークエリは、完了された計画ノードを返します。この場合、ノードの順番は、実際の実行順序を示すために逆順にされます。
select query,nodeid,parentid,substring(plannode from 1 for 56)
from stl_explain where query=15 order by 1, 2 desc;
query|nodeid|parentid| substring
-----+------+--------+--------------------------------------------------------
15 | 8 | 7 | -> XN Seq Scan on eve
15 | 7 | 5 | -> XN Hash(cost=87.98..87.9
15 | 6 | 5 | -> XN Seq Scan on sales(cos
15 | 5 | 4 | -> XN Hash Join DS_DIST_OUTER(cos
15 | 4 | 3 | -> XN HashAggregate(cost=862286577.07..
15 | 3 | 2 | -> XN Sort(cost=1000862287175.47..10008622871
15 | 2 | 1 | -> XN Network(cost=1000862287175.47..1000862287197.
15 | 1 | 0 |XN Merge(cost=1000862287175.47..1000862287197.46 rows=87
(8 rows)
次のクエリは、ウィンドウ関数を含むすべてのクエリプランのクエリ ID を取得します。
select query, trim(plannode) from stl_explain
where plannode like '%Window%';
query| btrim
-----+------------------------------------------------------------------------
26 | -> XN Window(cost=1000985348268.57..1000985351256.98 rows=170 width=33)
27 | -> XN Window(cost=1000985348268.57..1000985351256.98 rows=170 width=33)
(2 rows)