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 ノードで有効にするには、「並列度を適応的に調整」を参照してください。
パラレルクエリの有効化または無効化
有効化
に移動します。クラスターの [基本情報] ページで、[データベース接続] セクションを見つけます。対象のエンドポイントを選択し、[設定] をクリックします。[エンドポイント設定の編集] ダイアログボックスで、パラレルクエリを[有効]にし、[並列度] を設定します。
推奨設定と注意点:
-
[並列度] は、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パラメータは、単一クエリのパラレル実行のための最大ワーカースレッド数を設定します。詳細については、「パラメータの説明」をご参照ください。 -
無効化
に移動します。クラスターの [基本情報] ページで、[データベース接続] セクションを見つけます。対象のエンドポイントを選択し、[設定] をクリックします。[エンドポイント設定の編集] ダイアログボックスで、パラレルクエリを[無効]にします。
注意:
-
パラレルクエリの無効化は、新しい接続に対してのみ有効です。
-
コンソールでパラレルクエリを無効にした後、
loose_max_parallel_degreeも 0 に設定されていることを確認してください。説明loose_max_parallel_degreeパラメータは、単一クエリのパラレル実行のための最大ワーカースレッド数を設定します。詳細については、「パラメータの説明」をご参照ください。
パラレルクエリの設定
以下に、PolarDB が提供するパラレルクエリの制御ポリシーの概要を示します。詳細については、「パラレルリソース制御ポリシーを設定する」をご参照ください。
|
タイプ |
説明 |
|
オプティマイザのパラレル実行しきい値 |
PolarDB は 2 つのしきい値を提供しており、クエリがそのいずれかを超えた場合にオプティマイザは並列プランを検討します。
|
|
マルチノード並列スケーリングのしきい値 |
PolarDB には、マルチノード並列スケーリング用に 2 つのしきい値が用意されています。いずれかのしきい値を超えると、システムはスケールアウトします。
|
ヒントによるパラレルクエリの制御
ヒントは、ステートメントレベルでパラレル実行を制御し、デフォルトの動作を上書きしたり、並列度を設定したり、並列化するテーブルを指定したりできます。たとえば、ヒントを使用して特定の低速クエリを高速化できます。完全な構文については、「パラレルクエリのヒント構文」をご参照ください。
制限と互換性の問題
制限
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 はアクセスされたすべての行をロックします。行ロック数は、順次実行時よりも多くなる場合があります。



