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

PolarDB:並列リフレッシュ

最終更新日:Jun 04, 2026

PolarDB for MySQL では、マテリアライズドビューの完全更新および増分更新の初回実行において、ETL と ePQ の 2 種類の並列書き込みモードがサポートされています。リフレッシュ効率を向上させる最適なモードは、ワイドテーブルとナローテーブル、クラスターシリーズ(Cluster Edition またはマルチプライマリクラスター)、コンピュートオフロードの必要性などのワークロード特性に依存します。

概要

実行効率を向上させるため、PolarDB for MySQL は、マテリアライズドビューの完全更新または増分更新の初回実行に対して、以下の 2 つの並列書き込みモードを提供しています。

モード

アクティベーション

アーキテクチャ

ユースケース

ETL 並列書き込み(デフォルト)

デフォルトモード(並列処理の次数が 1 より大きい場合に自動的に有効化されます)。

このモードでは、クエリをリモートノードにオフロードし、複数のワーカーが結果を並列で消費して書き込みます。

ワイドテーブル、大規模データ量、クエリオフロードが必要なシナリオ。

ePQ 並列書き込み

手動で有効化する必要があります。

PQ フレームワークが INSERT SELECT 文を分割し、複数のワーカーによる並列実行をサポートします。また、MPP オフロードもサポートします。

ナローテーブルおよびエンドツーエンドの並列処理が必要なシナリオ。

どちらのモードも、materialized_view_refresh_parallelism を 1 より大きい値に設定する必要があります。

互換性

バージョン

並列リフレッシュモード

注記

PolarDB for MySQL 8.0.1(マイナーカーネルバージョン 8.0.1.1.54 以降)

ETL モード

ETL モードのみ。

PolarDB for MySQL 8.0.2(マイナーカーネルバージョン 8.0.2.2.34 および 8.0.2.2.35)

ePQ モード

  • ePQ モードのみ。

  • 現在、パーティション MDL と互換性がありません。暗黙的パーティショニングが有効になっている場合は、partition_level_mdl を無効化する必要があります。

リフレッシュプロセス

マテリアライズドビューの完全更新は、次の 3 段階で構成されます。

  1. コンテナテーブルの作成:マテリアライズドビューの定義から新しいコンテナテーブルが作成されます。materialized_view_implicit_partition_num > 1 の場合、並列書き込み時のロック競合を防ぐために、ハッシュパーティションが自動的に追加されます。

    説明

    MySQL 8.0.1materialized_view_implicit_partition_num パラメーターをサポートしていません。

  2. データの並列書き込み:システムは選択されたモードに従ってデータを並列で書き込みます。

  3. カラムナインデックスの構築(オプション):materialized_view_add_columnar_index_after_insert = ON の場合、システムはまずリフレッシュを完了した後、コンテナテーブルに対してカラムナインデックス(IMCI)を構築します。

ETL 並列書き込みモード

仕組み

  1. PolarDB はオフロードポリシーに基づいてリモートノード(カラムストアインデックス読み取り専用ノードまたは行ストア読み取り専用ノード)を選択し、接続を確立します。

  2. プライマリ(RW)ノードがマテリアライズドビューの定義クエリをリモートノードに送信して実行します。

  3. リモートノードが結果セットをストリーミングで返します。圧縮データ転送がサポートされています。

  4. プライマリ(RW)ノードが複数のワーカースレッドを作成します。各ワーカースレッドが並列で行をフェッチし、コンテナテーブルの異なるパーティションに書き込みます。

特徴

  • クエリの計算はリモートノードで実行され、プライマリ(RW)ノードの CPU リソースを消費しません。

  • 書き込み操作はプライマリ(RW)ノード上でローカルに実行され、トランザクションの一貫性が確保されます。

  • ワイドテーブルのシナリオでは、行長によって並列効率が影響を受けません。

  • マルチプライマリクラスター(Limitless) をサポートします。

使用方法

PolarDB クラスターパラメーターの変更方法は、コンソールとデータベースセッションで異なります。その違いは以下のとおりです。

  • PolarDB コンソールの場合

    • 互換性:MySQL 設定ファイルとの互換性を考慮し、PolarDB コンソールの一部のクラスターパラメーターには loose_ プレフィックスが付与されています。

    • 手順loose_ プレフィックス付きのパラメーターを検索・変更します。

  • データベースセッション(コマンドラインまたはクライアントを使用)の場合

    • 手順:データベースセッションで SET コマンドを使用してパラメーターを変更する際は、loose_ プレフィックスを削除し、元のパラメーター名を使用します。

パラメーター

例となる値

セッション単位での変更可否

説明

materialized_view_refresh_parallelism

16

いいえ

並列処理の次数を設定します。1 より大きい値を指定すると、並列リフレッシュが有効になります。

materialized_view_complete_refresh_offload_policy

FORCE_IMCI

はい

手動リフレッシュ時に、セッション単位でオフロードポリシーを設定します。

パラメーターを設定したら、次のコマンドを実行してマテリアライズドビューをリフレッシュします。

-- マテリアライズドビューをリフレッシュ
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;

ePQ 並列書き込みモード

仕組み(オフロードポリシーが FORCE_IMCI の場合、リモートカラムストアインデックス読み取り専用ノードへの MPP オフロード)

  1. システムは PQ ワーカーをリモートカラムストアインデックス読み取り専用ノードにスケジューリングし、SELECT スキャンを実行します。

  2. PQ ワーカーがスキャン結果を内部ネットワーク経由でプライマリ(RW)ノードに送信します。圧縮がサポートされています。

  3. 複数の PQ ワーカーがプライマリ(RW)ノード上でソーステーブルのデータを並列でスキャンします。

  4. PQ ワーカーがスキャン結果をコンテナテーブルのパーティションに並列で書き込みます。

  5. 最後に、プライマリ(RW)ノードがローカルでデータ書き込みを完了します。

特徴

  • エンドツーエンドの並列処理:単一の並列実行プランでスキャンと書き込みの両方を処理します。

  • ナローテーブルではほぼ線形のスケーリングを実現します。

  • ETL のシングルポートネットワーク転送制限を回避します。

  • 現在、Limitless クラスターではサポートされていません。操作は自動的にシリアル実行にフォールバックします。

ネットワーク圧縮(MPP オフロードシナリオ)

前提条件

パラメーター

例となる値

セッションレベルで設定可能

説明

materialized_view_etl_compression_algorithm

ZSTD

はい

マテリアライズドビューのリフレッシュ中にレプリカノードから転送されるデータの圧縮アルゴリズムを指定します。圧縮を有効にするには、ZSTD を設定する必要があります。

  • UNCOMPRESSED(デフォルト)

  • ZSTD

materialized_view_etl_compression_level

3

はい

圧縮レベルを指定します。このパラメーターが 0(デフォルト)または無効な値に設定されている場合、システムは ZSTD アルゴリズムでレベル 3 を使用します。

  • 有効な値:0~22

  • デフォルト値:0

影響

  • ノード間で転送されるデータ量を 60%~80% 削減します。

  • 圧縮および展開により CPU オーバーヘッドが発生します。CPU がボトルネックとなるシナリオでは、このトレードオフを考慮する必要があります。

推奨事項

圧縮転送はワイドテーブルの場合にのみ推奨されます。ナローテーブルでは、圧縮による CPU オーバーヘッドがネットワーク上のメリットを相殺する可能性があるため、UNCOMPRESSED 設定を使用することを推奨します。マテリアライズドビューがワイドテーブルであり、かつ実行オフロードが必要な場合は、MPP オフロード付きの ePQ モードではなく、直接 ETL モードを使用することを検討してください。ETL モードはワイドテーブルに本来適しています。

手順

シナリオ A:リモートノードへの MPP オフロード

パラメーター

例となる値

セッションレベルで設定可能

説明

materialized_view_refresh_parallelism

16

いいえ

並列処理の次数を設定します。1 より大きい値を指定すると、並列リフレッシュが有効になります。

materialized_view_implicit_partition_num

16

はい

暗黙的パーティションの数を設定します。

説明

materialized_view_implicit_partition_num パラメーターは、MySQL 8.0.1 ではサポートされていません。

materialized_view_complete_refresh_offload_policy

FORCE_IMCI

はい

手動リフレッシュ時に、セッションごとに異なるオフロードポリシーを指定できます。

pq_mpp_allow_imci_node

ON

いいえ

カラムストアインデックス読み取り専用ノードへのオフロードスケジューリングを許可します。

materialized_view_etl_compression_algorithm

ZSTD

はい

圧縮転送を有効にします(ワイドテーブルに推奨。ナローテーブルでは省略可能)。

materialized_view_etl_compression_level

3

はい

圧縮転送の圧縮レベルを設定します。

これらのパラメーターを設定したら、リフレッシュを実行します。

-- リフレッシュを実行
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;

シナリオ B:特定のノードへの ePQ オフロード

クラスターに複数のカラムストアインデックス読み取り専用ノードがある場合、pq_mpp_allow_dispatch_to_imci_node を使用して、ePQ MPP スケジューリングリクエストを受け取るノードを制御できます。このパラメーターは、プライマリ(RW)ノードと対象のカラムストアインデックス読み取り専用ノードの両方で ON に設定する必要があります。このパラメーターがノード上で有効になっていない場合、そのカラムストアインデックス読み取り専用ノードはスケジューリング対象になりません。

-- 1. プライマリ(RW)ノードで、PQ ワーカーリソースとして機能する能力を無効化します。
-- コンソールで pq_mpp_allow_imci_node = OFF を設定します。

-- 2. プライマリ(RW)ノードで、IMCI ノードへのスケジューリングを許可します。
-- コンソールで pq_mpp_allow_dispatch_to_imci_node = ON を設定します。

-- 3. オフロードクエリを処理する IMCI ノードに接続し、そのノードでのみスケジューリングエントリポイントを有効化します。
-- コンソールで pq_mpp_allow_dispatch_to_imci_node = ON を設定します。

-- 4. プライマリ(RW)ノードに戻り、IMCI オフロードポリシーでリフレッシュを実行します。
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;
REFRESH MATERIALIZED VIEW <schema_name>.<mview_name>;

この機能を有効化した後、information_schema.cluster_group_resource_view を使用して対象ノードのステータスを確認します。対象のカラムストアインデックス読み取り専用ノードには allow_to_dispatch が表示され、EXTRA 列に Allow to dispatch to IMCI node が含まれている必要があります。このモードでは、カラムストアインデックス読み取り専用ノードはスケジューリングリクエストのみを受け取り、PQ ワーカーとしては機能しません。すべてのカラムストアインデックス読み取り専用ノードを ePQ ワーカーリソースとして機能させるには、pq_mpp_allow_imci_node = ON を設定します。

オフロード対象ノードの選択

オフロードポリシーが MASTER でない場合、システムは SELECT クエリを実行するリモートノードを選択します。

ポリシーによるノードタイプの決定

ポリシー

候補ノードタイプ

説明

PREFER_IMCI

IMCI 読み取り専用ノード

マスター(RW)ノードでのローカル実行にフォールバックし、警告をログに記録します。

FORCE_IMCI

IMCI 読み取り専用ノード

エラーで失敗します。

PREFER_TPRO

行ストア読み取り専用ノード

マスター(RW)ノードでのローカル実行にフォールバックし、警告をログに記録します。

FORCE_TPRO

行ストア読み取り専用ノード

エラーで失敗します。

COST

IMCI 読み取り専用ノードまたは行ストア読み取り専用ノード(コストに基づく)

利用可能なノードタイプが 1 種類のみの場合、そのタイプを選択します。どちらも利用できない場合は、マスター(RW)ノードにフォールバックします。

COST ポリシーの決定ロジック

materialized_view_complete_refresh_offload_policy = COST の場合、システムはクエリのオプティマイザーのコストとしきい値を比較して対象ノードを決定します。

  • クエリコスト ≥ cost_threshold_for_imci の場合:IMCI 読み取り専用ノードにオフロードします。IMCI は高コストのスキャンおよび集約クエリに適しています。

  • クエリコスト < cost_threshold_for_imci の場合:行ストア読み取り専用ノードにオフロードします。行ストア読み取り専用ノードは軽量なクエリに十分です。

-- コストのしきい値を設定(デフォルトは 0 で、すべてのクエリが IMCI にオフロードされる傾向があります)。
SET SESSION cost_threshold_for_imci = 100000;

-- COST ポリシーを使用。
SET SESSION materialized_view_complete_refresh_offload_policy = COST;

複数ノードの負荷分散

同じタイプのノードが複数ある場合、システムはラウンドロビン方式でノードを選択します。

  • 各リフレッシュタスクは、グローバルカウンターに基づいて次のノードを選択します。

  • 選択されたノードへの接続が失敗した場合、システムはリスト内の次のノードを自動的に試行し、すべてのノードを試行するまで繰り返します。

  • システムは、異なるマテリアライズドビューのリフレッシュタスクをノード間で均等に分散します。

ePQ + MPP タスクを IMCI ノードにオフロードするには、次の 2 つの方法のいずれかを使用します。

  1. pq_mpp_allow_imci_node を有効にして、すべての IMCI 読み取り専用ノードへのオフロードをサポートします。

  2. まず pq_mpp_allow_imci_node = OFF を設定し、次に pq_mpp_allow_dispatch_to_imci_node を使用して候補となる IMCI 読み取り専用ノードを絞り込みます。

    • マスター(RW)ノードで pq_mpp_allow_dispatch_to_imci_node = ON を設定し、マスター(RW)ノードがリモート IMCI 読み取り専用ノードからのディスパッチエントリポイントステータスを受け入れることを許可します。

    • オフロードクエリを処理させたい各 IMCI 読み取り専用ノードで pq_mpp_allow_dispatch_to_imci_node = ON を設定します。

    • オフロードクエリを処理させたくない各 IMCI 読み取り専用ノードでは、pq_mpp_allow_dispatch_to_imci_node = OFF のままにしておきます。

推奨ポリシー

本番環境では、FORCE_IMCI または FORCE_TPRO を使用してください。PREFER_* ポリシーは避けてください。

理由:PREFER_* ポリシーでは、対象ノードが利用できない場合、マスター(RW)ノードでのローカル実行に静かにフォールバックします。このフォールバックにより、INSERT SELECT 文がマスター(RW)ノードでフルスキャンおよび書き込みを実行します。これにより大規模トランザクションが発生し、マスター(RW)ノード上のオンラインワークロードのパフォーマンスに影響を与える可能性があります。

構成例

-- 推奨:IMCI ノードの使用を強制します。利用できない場合はフォールバックせずに失敗します。
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_IMCI;

-- 行ストア読み取り専用ノードのみを使用します。利用できない場合は失敗します。
SET SESSION materialized_view_complete_refresh_offload_policy = FORCE_TPRO;

-- クエリコストに基づいて IMCI と TPRO の間を自動選択します。
SET SESSION materialized_view_complete_refresh_offload_policy = COST;
SET SESSION cost_threshold_for_imci = 50000;

パラメーターのスコープと設定

基本ルール

  • GLOBAL パラメーター:コンソールでのみ設定でき、すべてのセッションおよび自動リフレッシュスレッドに適用されます。

  • SESSION パラメーターSET SESSION を使用して現在のセッションに設定できます。また、コンソールでデフォルト値を変更することも可能です。自動リフレッシュスレッドは GLOBAL デフォルト値を使用します。

ETL 並列書き込みモードのパラメータースコープ

パラメーター

スコープ

セッション単位での変更可否

説明

materialized_view_refresh_parallelism

GLOBAL

いいえ、GLOBAL である必要があります

すべてのリフレッシュタスクで同じ並列処理の次数を共有します。

materialized_view_complete_refresh_offload_policy

SESSION

はい

手動リフレッシュの場合、セッションごとに異なるオフロードポリシーを指定できます。

materialized_view_use_atomic_autoinc_for_refresh

SESSION

はい

アトミックオートインクリメント最適化を無効化できます。

materialized_view_cache_etl_result

SESSION

はい

結果セットのキャッシュを有効にします。

ePQ 並列書き込みモードのパラメータースコープ

パラメーター

スコープ

セッション単位での変更可否

説明

materialized_view_refresh_parallelism

GLOBAL

いいえ、GLOBAL である必要があります

すべてのリフレッシュタスクで同じ並列処理の次数を共有します。

pq_mpp_allow_imci_node

GLOBAL

いいえ、GLOBAL である必要があります

MPP タスクを IMCI ノードにスケジューリングできるかどうかを制御します。

pq_mpp_allow_dispatch_to_imci_node

GLOBAL

いいえ、GLOBAL である必要があります

IMCI スケジューリングエントリポイントの使用を許可します。このパラメーターは、プライマリ(RW)ノードとカラムナインデックスを含む対象の読み取り専用ノードの両方で有効化する必要があります。

materialized_view_complete_refresh_offload_policy

SESSION

はい

手動リフレッシュの場合、セッションごとに異なるオフロードポリシーを指定できます。

materialized_view_implicit_partition_num

SESSION

はい

各マテリアライズドビューで異なるパーティション数を使用できます。

materialized_view_etl_compression_algorithm

SESSION

はい

MPP オフロード時のトランスポート圧縮アルゴリズムを指定します。この設定は PQ ワーカーに自動的に伝播されます。

materialized_view_etl_compression_level

SESSION

はい

圧縮レベルを指定します。この設定は PQ ワーカーに自動的に伝播されます。

注記

  • 手動リフレッシュのみを使用する場合、各セッションで SESSION パラメーターを調整できます。

  • 自動リフレッシュに依存する場合、コンソールですべての SESSION パラメーターの適切なデフォルト値を設定する必要があります。

  • GLOBAL パラメーターは、リフレッシュ方法に関係なくコンソールで設定する必要があります。変更は、その後のすべてのタスクに対して即座に有効になります。

  • SET SESSION 設定はクラスターリスタート後に永続化されません。一方、コンソールで変更された GLOBAL パラメーターは永続化されます。

パラメーターリファレンス

コアパラメーター

パラメーター

スコープ

デフォルト

説明

materialized_view_refresh_parallelism

GLOBAL

1~1024

1

パラレルワーカーの数。1 より大きい値を指定すると、並列リフレッシュが有効になります。

materialized_view_implicit_partition_num

SESSION

0 ~ 無制限

1

コンテナテーブルの暗黙の HASH パーティションの数です。1 より大きい値を指定すると、暗黙の HASH パーティション分割が有効になります。

説明

MySQL 8.0.1 は、materialized_view_implicit_partition_num パラメーターをサポートしていません。

materialized_view_use_atomic_autoinc_for_refresh

SESSION

ON/OFF

ON

暗黙的パーティション列に対してアトミックオートインクリメント値を使用することでパフォーマンスを向上させます。

コンピュートオフロードパラメーター

パラメーター

スコープ

デフォルト

説明

materialized_view_complete_refresh_offload_policy

SESSION

サポートされているポリシー値を参照

PREFER_IMCI

クエリ計算のオフロードポリシーを指定します。

pq_mpp_allow_imci_node

GLOBAL

ON/OFF

OFF

読み取り専用 IMCI ノードに PQ ワーカーをスケジューリングすることを許可します(ePQ モードに必須)。

pq_mpp_allow_dispatch_to_imci_node

GLOBAL

ON/OFF

OFF

IMCI ディスパッチエントリポイントの使用を許可します。このパラメーターは、プライマリ(RW)ノードと対象の読み取り専用 IMCI ノードの両方で有効化する必要があります。

ネットワーク圧縮パラメーター

パラメーター

スコープ

デフォルト

説明

materialized_view_etl_compression_algorithm

SESSION

  • UNCOMPRESSED

  • ZSTD

UNCOMPRESSED

内部 PQ チャンネルの圧縮アルゴリズムを指定します。この設定は ePQ MPP オフロードモードでのみ適用されます。

materialized_view_etl_compression_level

SESSION

0~22

0

PQ チャンネルの ZSTD 圧縮レベルを指定します。0 に設定すると、ZSTD のデフォルトレベル(3)が使用されます。

materialized_view_cache_etl_result

SESSION

ON/OFF

OFF

結果セット全体をメモリにキャッシュするかどうかを指定します。この設定は ETL モードでのみ有効です。

圧縮の仕組み:

モード

圧縮場所

有効条件

ePQ(MPP オフロード)

プライマリ(RW)ノードとリモートノード間の内部 PQ チャンネル。

materialized_view_etl_compression_algorithm = ZSTD

ePQ(ローカルのみ)

ネットワーク転送なし。

該当なし。

materialized_view_etl_compression_level パラメーターは、materialized_view_etl_compression_algorithm = ZSTD の場合にのみ有効です。0 に設定すると、ZSTD のデフォルトレベル 3 が使用されます。1~22 の値を設定すると、指定されたレベルが使用されます。レベルを高くすると圧縮率は向上しますが、CPU オーバーヘッドも増加します。

オフロードポリシー(materialized_view_complete_refresh_offload_policy パラメーター)

説明

MASTER

プライマリ(RW)ノードがすべての操作をローカルで実行します。

PREFER_TPRO

読み取り専用 TPRO ノードへのオフロードを優先します。利用できない場合はプライマリ(RW)ノードにフォールバックします。

PREFER_IMCI

読み取り専用 IMCI ノードへのオフロードを優先します。利用できない場合はプライマリ(RW)ノードにフォールバックします。

FORCE_TPRO

読み取り専用 TPRO ノードへの計算オフロードを強制します。そのようなノードが利用できない場合、操作は失敗します。

FORCE_IMCI

読み取り専用 IMCI ノードへの計算オフロードを強制します。そのようなノードが利用できない場合、操作は失敗します。

COST

コストベースモデルを使用して、読み取り専用 IMCI ノードまたは読み取り専用 TPRO ノードのいずれかを自動的に選択してオフロードします。

モード選択の推奨事項

シナリオ

推奨モード

主な構成

リモートノードのないナローテーブル

ローカル限定 ePQ

materialized_view_complete_refresh_offload_policy=MASTER

カラムストアインデックス付き読み取り専用ノードまたは行ストア読み取り専用ノードのあるナローテーブル

MPP オフロード付き ETL/ePQ

materialized_view_complete_refresh_offload_policy=FORCE_IMCI

ワイドテーブルまたは大規模フィールドを含むテーブル

ETL

materialized_view_complete_refresh_offload_policy=FORCE_IMCI

マルチマスタクラスター(Limitless)

ETL

ETL モードを使用します。マルチマスタクラスターでは ePQ は利用できません。

注意事項

  • 並列処理の次数が 1 の場合の効果なし:両方の並列モードは、シリアルの INSERT SELECT 操作に劣化します。

  • リモートノードの可用性:ETL モードおよび ePQ MPP オフロードはどちらもリモートノードに依存します。リモートノードが利用できない場合、FORCE_* ポリシーはエラーを返し、PREFER_* ポリシーはプライマリ(RW)ノードでのローカル実行にフォールバックします。

  • マルチプライマリ環境の制限マルチプライマリクラスター(Limitless) では、ePQ モードは自動的に無効化され、シリアル実行にフォールバックします。並列リフレッシュには ETL モードを使用してください。

  • IMCI カラムカバー率:カラムナインデックスを持つ読み取り専用ノードに ePQ MPP オフロードを使用する場合、カラムナインデックスはマテリアライズドビュークエリで読み取られるすべての列をカバーしている必要があります。そうでない場合、システムはエラーを返します。ETL モードにはこの制限はありません。

  • 暗黙的パーティション数:この値を並列処理の次数の 0.5~2 倍に設定することを推奨します。パーティションが少なすぎると書き込み競合が発生し、多すぎるとファイル管理のオーバーヘッドが増加します。

  • 書き込み場所:どちらのモードでも、データ書き込みは常にプライマリ(RW)ノード上でローカルに完了します。オフロードは SELECT クエリの実行場所にのみ影響します。

  • パラメーターの永続化SET SESSION で設定された内容はクラスターリスタート後に永続化されませんが、コンソールで変更された GLOBAL パラメーターは永続化されます。

  • 圧縮と CPU のトレードオフ:ePQ MPP オフロードでは、materialized_view_etl_compression_algorithm=ZSTD を設定することを推奨します。ただし、ナローテーブルでは圧縮による CPU オーバーヘッドがネットワーク上のメリットを相殺する可能性があります。