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 演算子と同じです。