GI演算子は、パーティションまたはデータブロック単位でテーブル全体をイテレーションするために、パラレル実行で使用されます。
イテレーションするデータの粒度に基づいて、GI演算子にはPX PARTITION ITERATORとPX BLOCK ITERATORが含まれます。
PX PARTITION ITERATOR
PX PARTITION ITERATOR演算子は、パーティション単位でデータをイテレーションするために使用されます。
以下の例では、2番目の演算子がパーティション単位でデータをイテレーションします。
obclient> CREATE TABLE t (c1 INT, c2 INT) PARTITION BY HASH(c1) PARTITIONS 4;
Query OK, 0 rows affected
obclient> CREATE INDEX idx ON t (c1);
Query OK, 0 rows affected
obclient> EXPLAIN SELECT /*+FULL(t)*/ c1 FROM t;
Query Plan:
======================================================
|ID|OPERATOR |NAME |EST. ROWS|COST |
------------------------------------------------------
|0 |PX COORDINATOR | |400000 |427257|
|1 | EXCHANGE OUT DISTR |:EX10000|400000 |247403|
|2 | PX PARTITION ITERATOR| |400000 |247403|
|3 | TABLE SCAN |T |400000 |247403|
======================================================
Outputs & filters:
-------------------------------------
0 - output([T.C1], [T.C2]), filter(nil)
1 - output([T.C1], [T.C2]), filter(nil), dop=1
2 - output([T.C1], [T.C2]), filter(nil)
3 - output([T.C1], [T.C2]), filter(nil),
access([T.C1], [T.C2]), partitions(p[0-3])
上記の例の実行計画表示において、outputs & filters列にPX PARTITION ITERATOR演算子の出力情報が詳細に示されています。
| 情報名 | 意味 |
|---|---|
| output | この演算子が出力する式。 |
| filter | この演算子上のフィルタ条件。例ではPX PARTITION ITERATOR演算子にfilterが設定されていないため、nilとなります。 |
PX BLOCK ITERATOR
PX BLOCK ITERATOR演算子は、データブロック単位でデータをイテレーションするために使用されます。
PX PARTITION ITERATORと比較して、PX BLOCK ITERATOR演算子はデータブロックごとにイテレーションするため、粒度がより細かく、より多くのタスクを分割でき、より高い並列度をサポートします。
obclient> EXPLAIN SELECT /*+PARALLEL(4)*/ c1 FROM t;
Query Plan:
==================================================
|ID|OPERATOR |NAME |EST. ROWS|COST |
--------------------------------------------------
|0 |PX COORDINATOR | |400000 |279171|
|1 | EXCHANGE OUT DISTR|:EX10000|400000 |189244|
|2 | PX BLOCK ITERATOR| |400000 |189244|
|3 | TABLE SCAN |T(IDX) |400000 |189244|
==================================================
Outputs & filters:
-------------------------------------
0 - output([T.C1]), filter(nil)
1 - output([T.C1]), filter(nil), dop=4
2 - output([T.C1]), filter(nil)
3 - output([T.C1]), filter(nil),
access([T.C1]), partitions(p[0-3])
上記の例の実行計画表示では、outputs & filtersにPX BLOCK ITERATOR演算子の出力情報が詳細に示されており、フィールドの意味はPX PARTITION ITERATOR演算子と同じです。