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

PolarDB:エラスティック並列クエリ (ePQ) の使用

最終更新日:Jun 03, 2026

PolarDB for MySQL の ePQ を有効化、設定、制御する方法 (パラレル実行のしきい値、ヒント構文、既知の制限事項など) について説明します。

事前準備

  • お使いのクラスターがエラスティック並列クエリをサポートしていることを確認してください。

    • 単一ノード弾性並列クエリ:

      • データベースエンジン: 改訂版が8.0.1.0.5以降の8.0.1。

      • データベース版: Enterprise edition.

    • 単一ノード弾性並列クエリ:

      • データベースエンジン: 改訂版が8.0.2.1.4.1以降の8.0.2。

      • データベース版: Enterprise edition。

    • マルチノード弾性並列クエリ:

      • データベースエンジン: 改訂版が8.0.2.2.6以降の8.0.2。

      • データベース版: Enterprise edition。

  • パラレルクエリを有効にする前に、「制限事項と互換性の問題」を確認してください。

  • 読み取り専用ノードと読み書きノードの両方がパラレルクエリをサポートしていますが、デフォルトでは読み書きノードでは無効になっています。読み書きノードで有効にするには、「並列度の適応的調整」をご参照ください。

パラレルクエリの有効化または無効化

有効化

PolarDBコンソールに移動します。クラスターの [基本情報] ページで [データベース接続] セクションを探します。対象のエンドポイントを選択し、[設定] をクリックします。[エンドポイント設定の編集] ダイアログボックスで、パラレルクエリを [有効]にし、[並列度] を設定します。

クリックして詳細な手順を展開

  1. PolarDB コンソール にログインします。左側メニューで [クラスター] をクリックします。クラスターが配置されている [リージョン] を選択し、クラスター ID をクリックしてクラスター詳細ページに移動します。

  2. クラスターの [基本情報] ページで [データベース接続] セクションを探します。対象のエンドポイントを選択し、[設定] をクリックします。image

  3. [エンドポイント設定の編集] ダイアログボックスで、パラレルクエリを [有効]にし、[並列度] を設定します。その他のエンドポイントパラメータについては、「データベースプロキシの設定」をご参照ください。imageimage

推奨設定と注意事項:

  • [並列度] は、1 つのクエリが 1 つの計算ノードで使用できる最大ワーカースレッド数を指定します。クエリあたりの合計スレッド数 = 並列度 × ノード数。

  • 並列度は徐々に増やしてください。CPU コア数の 4 分の 1 を超えないようにしてください。まずは 2 から始めます。1 日後、CPU 負荷が低いままであれば値を上げ、負荷が上がれば中止します。

  • パラレルクエリの有効化は、新規接続にのみ適用されます。

  • コンソールの設定とクラスターパラメータは、次のように相互作用します:

    • loose_max_parallel_degree パラメータは、クラスター内のすべてのノードと接続に適用されますが、コンソールでの調整は設定されたエンドポイントにのみ適用されます。

    • コンソールの設定と loose_max_parallel_degree の両方が設定されている場合、コンソールの設定が優先されます。コンソールを使用して [パラレルクエリ] を有効にしてください。

    • コンソールで [パラレルクエリ] が有効になっていないが、loose_max_parallel_degree が 0 より大きい値に設定されている場合、デフォルトでシングルノードのパラレルクエリが有効になります。

    説明

    loose_max_parallel_degree パラメータは、1 つのクエリのパラレル実行に使用される最大ワーカースレッド数を設定します。「パラメータの説明」をご参照ください。

無効化

PolarDBコンソールに移動します。クラスターの [基本情報] ページで [データベース接続] セクションを探します。対象のエンドポイントを選択し、[設定] をクリックします。[エンドポイント設定の編集] ダイアログボックスで、パラレルクエリを [無効]にします。

クリックして詳細な手順を展開

  1. PolarDB コンソール にログインします。左側メニューで [クラスター] をクリックします。クラスターが配置されている [リージョン] を選択し、クラスター ID をクリックしてクラスター詳細ページに移動します。

  2. クラスターの [基本情報] ページで [データベース接続] セクションを探します。対象のエンドポイントを選択し、[設定] をクリックします。image

  3. [エンドポイント設定の編集] ダイアログボックスで、パラレルクエリを [無効]にします。image

注意:

  • パラレルクエリの無効化は、新規接続にのみ適用されます。

  • コンソールでパラレルクエリを無効にした後、loose_max_parallel_degree も 0 に設定されていることを確認してください。

    説明

    loose_max_parallel_degree パラメータは、1 つのクエリのパラレル実行に使用される最大ワーカースレッド数を設定します。「パラメータの説明」をご参照ください。

パラレルクエリの設定

PolarDB は、パラレルクエリに対していくつかの制御ポリシーを提供しており、以下にまとめます。完全なリストは、「パラレルリソース制御ポリシーの設定」を参照してください。

タイプ

説明

オプティマイザのパラレル実行のしきい値

PolarDB は 2 つのしきい値を提供します。クエリがいずれかのしきい値を超えると、オプティマイザはパラレルプランを検討します。

  • loose_records_threshold_for_parallelism

    テーブルの推定スキャン行数がこのしきい値を超えると、オプティマイザはパラレルプランを検討します。デフォルト値:10000。データセットが小さい、またはクエリの同時実行性が低い場合は、2000 以上に設定してください。

    説明

    スキャン行数はテーブルの統計情報に基づく推定値であり、正確ではない場合があります。

  • loose_cost_threshold_for_parallelism

    推定順次実行コストがこのしきい値を超えると、オプティマイザはパラレルプランを検討します。デフォルト値:50000。

マルチノードのパラレルスケーリングのしきい値

PolarDB は、マルチノードのパラレルスケーリングのために 2 つのしきい値を提供します。いずれかのしきい値を超えると、システムはスケールアウトします。

  • loose_records_threshold_for_mpp

    テーブルの推定スキャン行数がこのしきい値を超えると、オプティマイザはシングルノードからマルチノードでのパラレル実行にスケールします。[デフォルトでは、この値は loose_records_threshold_for_parallelism の値の N 倍です。ここで N は現在のクラスターエンドポイント内のノード数です]。

  • loose_cost_threshold_for_mpp

    クエリの順次実行コストがこのしきい値を超えると、オプティマイザはマルチノードでのパラレル実行にスケールします。[デフォルトでは、この値は loose_cost_threshold_for_parallelism の値の N 倍です。ここで N は現在のクラスターエンドポイント内のノード数です]。

ヒントを使用したパラレルクエリの制御

ヒントは、ステートメントレベルでパラレル実行を制御し、デフォルトの動作を上書きしたり、並列度を設定したり、パラレル化するテーブルを指定したりすることができます。たとえば、特定の遅いクエリを高速化するためにヒントを使用します。完全な構文は、「パラレルクエリのヒント構文」を参照してください。

ヒントを使用して PolarDB クラスターのプライマリエンドポイントでパラレルクエリを有効にできますか?

はい、可能ですが、PolarDBコンソール の使用を推奨します。ステートメントレベルの制御には、/*+ PARALLEL(n) */ または /*+ SET_VAR(max_parallel_degree=n) */ を使用して、並列度を n に設定します。2 つのヒントには違いがあります:

  • /*+ PARALLEL(n) */ は、ノードのタイプやデータ量に関係なく、強制的にパラレル実行を行います。

  • /*+ SET_VAR(max_parallel_degree=n) */ は、クエリが読み取り専用ノードにルーティングされ、オプティマイザがコストとデータ量に基づき並列化が妥当と判断した場合にのみ、パラレル実行を有効にします。

SQL ステートメントのヒントで設定されたパラレルパラメータと、コンソールの設定との間に競合はありますか?

いいえ。ヒントのパラメータは現在のステートメントにのみ適用され、グローバルなコンソールの設定を上書きします。

制限事項と互換性の問題

制限事項

PolarDB のパラレル実行には、次の制限事項があります:

  • InnoDB テーブルに対するクエリは、パラレル実行できません。

  • 全文検索インデックスを使用するクエリは、パラレル実行できません。

  • ストアド Procedures を含む式は、リーダーノードで実行する必要があります。

  • テーブルが Index Merge を使用してスキャンされる場合、テーブルスキャンはパラレル化できません。

  • SERIALIZABLE 分離レベルのトランザクション内のクエリステートメントは、パラレル実行できません。

  • 分離レベルが REPEATABLE READ の場合、トランザクション内の INSERT ... SELECT/REPLACE ... SELECT ステートメントのクエリ部分はパラレル実行できません。

互換性

  • エラーメッセージの数が変わる可能性があります

    順次実行時にエラーを返すクエリの場合、パラレル実行中にはエラーメッセージの総数が異なることがあります。

  • 精度の問題

    パラレル実行では、より多くの浮動小数点の中間結果が保存される可能性があり、最終的な出力でわずかな精度の違いが生じることがあります。

  • ネットワークパケットまたは中間結果が max_allowed_packet を超える

    パラレル実行では、より大きな中間結果が生成されることがあります。ネットワークパケットまたは中間結果の長さが max_allowed_packet を超えると、エラーが発生する可能性があります。これを解決するには、max_allowed_packet パラメータの値を増やしてください。「クラスターパラメータとノードパラメータの設定」をご参照ください。

  • 結果セットの順序の違い

    ORDER BY 句のない SELECT ... LIMIT n ステートメントは、複数のワーカーが異なる速度で完了するため、パラレル実行中に異なる順序で行を返すことがあります。

  • 行ロック数が増加する可能性があります

    SELECT ... FROM ... FOR SHARE のパラレル実行中、InnoDB はアクセスされたすべての行をロックします。行ロック数は、順次実行時よりも多くなる可能性があります。

よくある質問

パラレルクエリを有効にすると、すべてのクエリがパラレル実行で高速化されますか?

すべてのクエリがパラレル実行されるわけではありません。以下のケースでは、順次実行にフォールバックします:

  • クエリタイプがサポートされていない場合。「制限事項」をご参照ください。

  • スキャン量またはクエリコストが、loose_records_threshold_for_parallelism および loose_cost_threshold_for_parallelism によって設定されたしきい値を下回る場合。

  • クラスターのリソース負荷が高すぎる場合。「システムリソース制御ポリシー」をご参照ください。

パラレルクエリを有効にした後、ヒント構文が有効にならないのはなぜですか?

以下を確認してください:

  • パラレルクエリの変更は、新規接続にのみ適用されます。クラスターに再接続してください。

  • パラレルクエリは、デフォルトで読み書きノードでは無効になっています。プライマリエンドポイントの代わりに、クラスターエンドポイントを使用してください。「パラレルリソース制御ポリシーの設定」をご参照ください。