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

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

最終更新日:Aug 13, 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。

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

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

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

有効化

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

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

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

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

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

推奨設定と注意点:

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

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

  • パラレルクエリの有効化は、新しい接続に対してのみ有効です。

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

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

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

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

    説明

    loose_max_parallel_degree パラメータは、単一クエリのパラレル実行のための最大ワーカースレッド数を設定します。詳細については、「パラメータの説明」をご参照ください。

無効化

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

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

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

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

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

注意:

  • パラレルクエリの無効化は、新しい接続に対してのみ有効です。

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

    説明

    loose_max_parallel_degree パラメータは、単一クエリのパラレル実行のための最大ワーカースレッド数を設定します。詳細については、「パラメータの説明」をご参照ください。

パラレルクエリの設定

以下に、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 以外のテーブルに対するクエリは、パラレルで実行できません。

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

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

  • テーブルがインデックスマージを使用してスキャンされる場合、そのテーブルスキャンは並列化できません。

  • 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 で設定されたしきい値を下回っています。

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

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

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

  • パラレルクエリの変更は、新しい接続に対してのみ有効です。クラスターに再接続してください。

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