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

PolarDB:Elastic Parallel Queryを使用したインデックス作成の高速化

最終更新日:Jul 01, 2024

Elastic Parallel Query機能を使用すると、Bツリーインデックスの作成プロセスとBツリーインデックスのグローバルインデックスの作成プロセスを高速化できます。 このトピックでは、この機能を使用して、Bツリーインデックスの作成プロセスとBツリーインデックスのグローバルインデックスの作成プロセスを高速化できる理由について説明します。 このトピックでは、この機能を使用してB-treeインデックスとB-treeインデックスのグローバルインデックスを作成する方法についても説明します。

制御ポリシー機能の動作

PolarDB for PostgreSQL (Oracleと互換) がインデックスを作成する場合、このサービスはインデックスを作成するヒープテーブルをスキャンし、インデックス付きエントリを作成します。 次に、このサービスは、インデックス付きエントリに基づいてインデックスBツリーを作成します。

この機能を使用してインデックスの作成プロセスを高速化すると、システムは自動的にクエリコーディネーター (QC) プロセスを作成し、ヒープテーブルを並行してスキャンします。 次に、インデックスを作成するために使用されるプロセスは、QCプロセスによって送信されたスキャン結果を受信し、インデックスを作成する。

注意事項

  • この機能を使用すると、一般列のインデックスのみを作成するプロセスを高速化できます。 CONCURRENTLYやINCLUDEなどの構文を使用してインデックスを作成する場合、この機能を使用してインデックスの作成プロセスを高速化することはできません。

  • 式で指定された列にはインデックスを作成できません。

パラメーター

Elastic Parallel Query機能を使用してインデックスの作成プロセスを高速化する場合は、次のパラメーターを設定します。

パラメーター

説明

polar_px_enable_btbuild

この機能を使用してインデックス作成を高速化するかどうかを指定します。 デフォルト値:off 有効な値:

  • off

  • on

polar_px_dop_per_node

この機能を使用してインデックスの作成プロセスを高速化するときに有効になる並列処理の程度を指定します。 デフォルト値は 1 です。 値を8または16に設定することを推奨します。

このパラメーターは、Elastic Parallel Queryの並列処理の程度も指定します。 詳細については、「Elastic Parallel Query機能を使用して分析クエリを実行する」をご参照ください。

指定したデータベースロールに対して、このパラメーターをonに設定することもできます。

polar_px_enable_replay_wait

polar_px_enable_btbuildをonに設定すると、現在のセッションに対してpolar_px_enable_replay_waitパラメーターが自動的に有効になります。 これにより、テーブル内の最新のエントリにインデックスが付けられます。 インデックスが作成されると、システムはパラメーターをデータベースのデフォルト値にリセットします。

polar_bt_write_page_buffer_size

インデックス作成時の書き込みI/O操作に関するポリシーを指定します。 デフォルトでは、パラメーターは0に設定されています。 この値は、インデックスを作成するときに、インデックス付きエントリがブロックごとにディスクにフラッシュされることを示します。 測定単位はブロックである。 最大値は8192です。 値を4096に設定することを推奨します。

  • このパラメーターを0に設定すると、インデックス作成時にインデックスページが完全に読み込まれたときに、インデックスページのすべてのインデックスエントリがブロックごとにディスクにフラッシュされます。

  • このパラメーターを0以外の値に設定した場合、フラッシュするインデックス付きエントリは、このパラメーターで示されるサイズのカーネルバッファーに格納されます。 バッファが完全にロードされると、バッファ内のすべてのインデックス付きエントリが一度にディスクにフラッシュされる。 これにより、頻繁なI/Oスケジューリングに起因するパフォーマンスのオーバーヘッドが防止されます。 このパラメーターは、20% によるインデックスの作成に必要な時間を短縮するのに役立ちます。

背景情報

次のステートメントを実行して、testという名前のテーブルを作成します。

CREATE TABLE test(id int,id2 int);

テーブルスキーマを照会します。

\d test
               Table "public.test"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |
 id2    | integer |           |          |

Elastic Parallel Queryを使用してテストテーブルのインデックスを作成するプロセスを高速化するには、次の手順を実行します。

  1. polar_px_enable_btbuildパラメーターをonに設定して、Elastic Parallel Query機能を使用し、インデックスの作成プロセスを高速化します。

    実行するステートメントは、次のとおりです。

    SET polar_px_enable_btbuild=on;

    設定が有効かどうかを確認します。

    SHOW polar_px_enable_btbuild;

    次の応答が返されます。

      polar_px_enable_btbuild
    -------------------------
     on
    (1 row)
  2. 次のステートメントを実行してインデックスを作成します。

    CREATE INDEX t ON test(id) WITH(px_build=on);

    テーブルスキーマを照会します。

    \d test
                   Table "public.test"
     Column |  Type   | Collation | Nullable | Default
    --------+---------+-----------+----------+---------
     id     | integer |           |          |
     id2    | integer |           |          |
    Indexes:
        "t" btree (id) WITH (px_build=finish)
説明

Elastic Parallel Query機能を使用してインデックスの作成プロセスを高速化する場合は、CREATE INDEXステートメントにpx_buildオプションを追加します。

インデックスの作成後、インデックスタイプ情報には (px_build=finish) フィールドが含まれます。 このフィールドは、Elastic Parallel Query機能を使用してインデックスが作成されることを示します。

polar_px_enable_btbuildがonに設定されているが、CREATE INDEXステートメントにpx_buildオプションが追加されていない場合、PolarDB for PostgreSQL (Compatible with Oracle) が提供するネイティブメソッドがインデックスの作成に使用されます。 例:

CREATE INDEX t ON test(id);

テーブルスキーマを照会します。

\d test
                Table "public.test"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 id     | integer |           |          |
Indexes:
    "t" btree (id)

パフォーマンスデータ

PolarDB for PostgreSQL (Compatible with Oracle) が提供するネイティブメソッドを使用するよりも、Elastic Parallel Query機能を使用して大きなテーブルのインデックスを作成する方が約5倍高速です。

Elastic Parallel Query機能を使用すると、Bツリーインデックスのグローバルインデックスの作成プロセスを高速化できます。 次の図は、B-treeインデックスのグローバルインデックスの作成プロセスを高速化するために、Elastic Parallel Query機能を使用する前後のパフォーマンスを比較しています。 この例では、130 GBのデータが使用されます。

Performance comparison