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



