すべてのプロダクト
Search
ドキュメントセンター

PolarDB:Parallel append

最終更新日:May 30, 2024

PolarDB for PostgreSQL (Compatible with Oracle) は、並列追加機能をサポートして、大量のデータに対するクエリを高速化します。

概要

クエリを並行して実行することは、コンピューティングシステム内の多数のCPUコアを考慮すると、ほとんどの最新のデータベースシステムにおいて不可欠な特徴である。 これは、PolarDB for PostgreSQL (Compatible with Oracle) にも当てはまります。これは、パーティションに対するクエリを並列に処理してパフォーマンスを向上させることができます。

image.png

使用法

PolarDB for PostgreSQL (Compatible with Oracle) では、並列追加機能がデフォルトで有効になっています。

並列実行は、パーティション間で、パーティション内で、またはハイブリッド方式で実行することができる。

各モードにはコストモデルがあり、オプティマイザは最もコストの低いモードを選択します。

パーティション間の並列実行

このモードでは、各ワーカーがパーティションを処理し、並列に動作します。

例:

EXPLAIN (コストOFF) select * from prt1;
                  クエリ計画
-----------------------------------------------
 収集
   Workers Planned: 6
   -> パラレル追加
         -> prt1_p5のSeqスキャン
         -> prt1_defaultのSeqスキャン
         -> prt1_p4のSeqスキャン
         -> prt1_p1のSeqスキャン
         -> prt1_p2のSeqスキャン
         -> prt1_p3のSeqスキャン
(9行) 

prt1パーティションテーブルには、prt1_p1、prt1_p2、prt1_p3、prt1_p4、prt1_p5、prt1_defaultの6つのパーティションがあります。 実行には6つのワーカーが使用され、それぞれが単一のパーティションで動作します。 クエリプランのParallel Append演算子は、この並列実行モードのインジケータです。

パーティション内での並列実行

このモードでは、パーティションテーブル全体が処理されるまで、複数のワーカーが同じパーティションを同時に処理してから次のパーティションに移動します。

EXPLAIN (コストOFF) select * from prt1;
                  クエリ計画
-----------------------------------------------
 収集
   Workers Planned: 6
   -> 追加
         -> prt1_p5のパラレルSeqスキャン
         -> prt1_defaultのパラレルSeqスキャン
         -> prt1_p4のパラレルSeqスキャン
         -> prt1_p1のパラレルSeqスキャン
         -> prt1_p2のパラレルSeqスキャン
         -> prt1_p3のパラレルSeqスキャン
(9行) 

6つのワーカーはすべて、prt1_p1、prt1_p2、prt1_p3、prt1_p4、prt1_p5、prt1_defaultパーティションのいずれかで連携してから、次のパーティションに進みます。

ハイブリッド並列実行

ハイブリッドモードでは、システムは、パーティション内およびパーティション間の両方で並列に実行を処理します。

EXPLAIN (コストOFF) select * from prt1;
                  クエリ計画
-----------------------------------------------
 収集
   計画されている労働者: 8
   -> パラレル追加
         -> prt1_p5のパラレルSeqスキャン
         -> prt1_defaultのパラレルSeqスキャン
         -> prt1_p4のパラレルSeqスキャン
         -> prt1_p1のパラレルSeqスキャン
         -> prt1_p2のパラレルSeqスキャン
         -> prt1_p3のパラレルSeqスキャン
(9行) 

この例では、8つのワーカーが使用されます。