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

PolarDB:使用方法

最終更新日:Jun 12, 2025

このトピックでは、Elastic Parallel Query(ePQ)機能の使用方法について説明します。

使用上の注意

  • クラスタのバージョンが ePQ 機能でサポートされていることを確認してください。

    • 単一ノードの elastic parallel query:

      • データベースエンジン: リビジョンバージョンが 8.0.1.0.5 以後の 8.0.1。

      • データベースエディション: Enterprise Edition。

    • 単一ノードの elastic parallel query:

      • データベースエンジン: リビジョンバージョンが 8.0.2.1.4.1 以後の 8.0.2。

      • データベースエディション: Enterprise Edition。

    • 複数ノードの elastic parallel query:

      • データベースエンジン: リビジョンバージョンが 8.0.2.2.6 以後の 8.0.2。

      • データベースエディション: Enterprise Edition。

  • ePQ 機能の制限と互換性の問題を認識していることを確認してください。詳細については、「制限と互換性の問題」をご参照ください。

  • 読み取り専用ノードとプライマリノードの両方で ePQ 機能がサポートされています。ePQ は、プライマリノードではデフォルトで無効になっています。必要に応じて、この機能を有効にすることができます。詳細については、「適応 DOP 設定」をご参照ください。

ePQ を有効または無効にする

ePQ を有効にする

PolarDBコンソール にログインします。[基本情報] ページの [データベース接続] セクションで、エンドポイントを選択し、[構成] をクリックします。[エンドポイント設定の変更] ダイアログで、パラレルクエリで [オン] を選択し、[並列処理] の値を構成します。

詳細については、ここをクリックしてください。

  1. PolarDB コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。左上隅で、クラスタのリージョンを選択します。クラスタを見つけて、その ID をクリックして [基本情報] ページに移動します。

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

  3. [エンドポイント設定の変更] ダイアログで、パラレルクエリで [オン] を選択し、[並列処理] の値を構成します。その他のパラメータの詳細については、「PolarProxy の構成」をご参照ください。imageimage

推奨設定と説明

  • [並列処理] は、単一のクエリに対して単一の計算ノードで同時に実行できるワーカースレッドの最大数です。単一のクエリで同時に実行できるワーカースレッドの最大数は、並列処理の次数(DOP)とノード数の積です。

  • 並列処理の値は少しずつ増やしてください。CPU コア数の合計の 4 分の 1 を超える値を使用しないことをお勧めします。たとえば、並列処理の値を 2 に設定できます。翌日 CPU 使用率を確認できます。 CPU 使用率が低い場合は、値を増やします。 CPU 使用率が高い場合は、値を増やさないでください。

  • ePQ は、機能を有効にした後に確立された接続に対してのみ有効になります。

  • DOP は、コンソールで、またはクラスタパラメータを使用して構成できます。

    • システムパラメータ loose_max_parallel_degree は、現在のクラスタ内のすべてのノードに適用され、クラスタ内のすべての接続に影響します。ただし、PolarDB コンソールでこのパラメータに加えられた調整は、現在の接続に対してのみ有効になります。

    • コンソールで、または loose_max_parallel_degree パラメータを使用して DOP を構成できます。コンソールでの設定が優先されます。コンソールを使用して ePQ を有効にすることをお勧めします。

    • コンソールで ePQ を有効にせずに loose_max_parallel_degree を 0 より大きい値に設定すると、ePQ が有効になります。

      説明

      loose_max_parallel_degree パラメータは、個々のクエリの最大 DOP を指定します。これは、クエリを並列で実行するために使用されるワーカーの最大数です。詳細については、「構成パラメータ」をご参照ください。

ePQ を無効にする

PolarDBコンソール にログインします。[基本情報] ページの [データベース接続] セクションで、エンドポイントを選択し、[構成] をクリックします。[エンドポイント設定の変更] ダイアログで、パラレルクエリで [オフ] を選択します。

詳細については、ここをクリックしてください。

  1. PolarDB コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  3. 左上隅で、クラスタがデプロイされているリージョンを選択します。

  4. クラスタを見つけて、その ID をクリックします。

  5. [基本情報] ページの [データベース接続] セクションで、エンドポイントを選択し、[構成] をクリックします。image

  6. [エンドポイント設定の変更] ダイアログで、パラレルクエリで [オフ] を選択します。image

注:

  • ePQ は、機能を無効にした後に確立された接続に対してのみ無効になります。

  • コンソールで ePQ を無効にした後、loose_max_parallel_degree パラメータが 0 に設定されていることを確認して、ePQ が完全に無効になっていることを確認します。

    説明

    loose_max_parallel_degree パラメータは、個々のクエリの最大 DOP を指定します。これは、クエリを並列で実行するために使用されるワーカーの最大数です。詳細については、「構成パラメータ」をご参照ください。

ePQ を構成する

ePQ 機能を管理するための一連のパラメータを構成できます。 次の表に、いくつかの主要なパラメータを示します。詳細については、「DOP ポリシー」をご参照ください。

タイプ

説明

適応 DOP 設定

loose_parallel_degree_policy パラメータを構成することで、単一クエリの DOP を設定できます。有効な値:

  • TYPICAL: PolarDB は、CPU 使用率などのデータベース負荷に関係なく、DOP を loose_max_parallel_degree と同じ値に設定します。

    説明

    loose_max_parallel_degree パラメータは、個々のクエリの最大 DOP を指定します。これは、クエリを並列で実行するために使用されるワーカーの最大数です。詳細については、「構成パラメータ」をご参照ください。

  • AUTO: PolarDB は、CPU 使用率などのデータベース負荷に基づいて elastic parallel query 機能を有効または無効にし、クエリコストに基づいて DOP を選択します。

  • REPLICA_AUTO (デフォルト): 読み取り専用ノードのみが、CPU 使用率などのデータベース負荷に基づいて elastic parallel query 機能を有効にするかどうかを決定し、クエリコストに基づいて DOP を選択します。プライマリノードは elastic parallel query を実行しません。

オプティマイザが ePQ を有効にできるかどうかを指定する

PolarDB は、オプティマイザが elastic parallel query 機能を有効にできるかどうかを指定するための 2 つのしきい値を提供します。SQL 文が次のいずれかの条件を満たしている場合、オプティマイザは elastic parallel query 機能を有効にします。

  • loose_records_threshold_for_parallelism

    スキャンされた行数が records_threshold_for_parallelism の値を超えると、オプティマイザは ePQ を有効にします。デフォルト値は 10000 です。クエリのほとんどが単純で、少量のデータしか含まれていない場合は、しきい値を少なくとも 2000 に設定することをお勧めします。

    説明

    スキャンされた行数は、テーブルの統計に基づいて推定されます。この数は、実際の行数とは異なる場合があります。

  • loose_cost_threshold_for_parallelism

    順次クエリの コスト が cost_threshold_for_parallelism パラメータの値を超えると、オプティマイザは ePQ を有効にします。デフォルト値は 50000 です。

複数ノード ePQ を有効にするかどうかを指定する

PolarDB は、複数ノード elastic parallel query を有効にするかどうかを指定するための 2 つのしきい値を提供します。SQL 文が次のいずれかの条件を満たしている場合、複数ノード elastic parallel query を使用できます。

  • loose_records_threshold_for_mpp

    クエリ文に含まれるテーブルのスキャン行数がこのしきい値を超えると、オプティマイザは複数ノード elastic parallel query の使用を検討し、計算のために複数ノードに並列タスクをスケジュールします。デフォルト値は、loose_records_threshold_for_parallelism 値の N 倍です。N 値は、現在のクラスタエンドポイントに含まれるノードの数です。

  • loose_cost_threshold_for_mpp

    クエリ文の順次実行コストがこのしきい値を超えると、オプティマイザは複数ノード elastic parallel query の使用を検討します。デフォルト値は、loose_cost_threshold_for_parallelism 値の N 倍です。N 値は、現在のクラスタエンドポイントに含まれるノードの数です。

ヒントを使用して ePQ を制御する

ヒントを使用してオプティマイザが ePQ を有効にするかどうかを指定することで、個々の SQL 文を最適化できます。また、ヒントを使用して、DOP と ePQ を有効にする必要があるテーブルを構成することもできます。たとえば、ePQ がシステムによって無効になっている場合、ヒントを使用して、頻繁に実行されるスロー SQL クエリを高速化できます。詳細については、「並列ヒント」をご参照ください。

ヒントを使用して、読み取り/書き込みモードの PolarDB クラスタエンドポイントの elastic parallel query 機能を有効にできますか?

はい。PolarDBコンソール で ePQ を有効にすることをお勧めします。 SQL 文に対して ePQ を有効にする場合、ヒント /*+ PARALLEL(n) */ または /*+ SET_VAR(max_parallel_degree=n) */ を使用して、クエリ DOP を n に設定できます。2 つのヒントは異なります。

  • /*+ PARALLEL(n) */ ヒントを使用すると、クエリがプライマリノードにルーティングされるかどうか、またはどのくらいのデータが関係するかに関係なく、ePQ が強制的に有効になります。

  • /*+ SET_VAR(max_parallel_degree=n) */ ヒントを使用すると、ePQ が有効になるかどうかは、クエリがプライマリノードにルーティングされるかどうか、およびオプティマイザによって評価されるクエリコストとデータ行によって異なります。

SQL 文でヒントを使用して指定した elastic parallel query パラメータは、コンソールで構成したものと競合しますか?ヒントコンソールで設定したものと競合する SQL 文ではどうなりますか?

いいえ。ヒントで指定されたパラメータは、現在の SQL 文に対して有効であり、コンソールで構成されたグローバルパラメータよりも優先順位が高くなります。

制限と互換性の問題

制限

PolarDB は、パラレルクエリ機能を継続的に改善しています。この機能は、次の状況ではパフォーマンスを向上させることができません。

  • InnoDB 以外 のテーブルに対するクエリ。

  • フルテキストインデックスを使用するクエリ。

  • リーダーによって実行する必要がある ストアドプロシージャ

  • INDEX-MERGE 結合を使用してスキャンされるテーブル。

  • シリアライザブルトランザクションでのクエリ。

  • 分離レベルが 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 はアクセスされるデータの各行をロックします。したがって、行ロックがかかっているレコードの数は、非並列実行の場合よりも多くなる可能性があります。この現象は、並列実行の場合には正常です。

よくある質問

elastic parallel query 機能を有効にすると、すべてのクエリが高速化されますか?

すべてのクエリが並列で実行されるわけではありません。次の場合、クエリは並列で実行されません。

  • パラレルクエリはサポートされていません。詳細については、「制限」をご参照ください。

  • スキャンされたデータまたはコストの行数が、パラレルクエリのしきい値に達していません。loose_records_threshold_for_parallelism パラメータと loose_cost_threshold_for_parallelism パラメータは、パラレルクエリのレコードしきい値とコストしきい値を定義します。

  • クラスタのワークロードが高すぎる場合、クエリは並列で実行されなくなります。詳細については、「システムリソースの使用量に基づく DOP 制御」をご参照ください。

ePQ を有効にした後、ヒント構文が機能しないのはなぜですか?

この問題は、次の原因が考えられます。

  • ePQ は、機能を有効または無効にした後に確立された接続に対してのみ有効または無効になります。 ePQ を有効にした後にクラスタに再接続したかどうかを確認してください。

  • ePQ は、プライマリノードではデフォルトで無効になっています。プライマリエンドポイントまたはクラスターエンドポイントを使用してデータベースに接続するかどうかを確認してください。クラスターエンドポイントを使用してデータベースに接続することをお勧めします。詳細については、「適応 DOP 設定」をご参照ください。