このトピックでは、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 を有効にする
にログインします。[基本情報] ページの [データベース接続] セクションで、エンドポイントを選択し、[構成] をクリックします。[エンドポイント設定の変更] ダイアログで、パラレルクエリで [オン] を選択し、[並列処理] の値を構成します。
推奨設定と説明
[並列処理] は、単一のクエリに対して単一の計算ノードで同時に実行できるワーカースレッドの最大数です。単一のクエリで同時に実行できるワーカースレッドの最大数は、並列処理の次数(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 を無効にする
にログインします。[基本情報] ページの [データベース接続] セクションで、エンドポイントを選択し、[構成] をクリックします。[エンドポイント設定の変更] ダイアログで、パラレルクエリで [オフ] を選択します。
注:
ePQ は、機能を無効にした後に確立された接続に対してのみ無効になります。
コンソールで ePQ を無効にした後、
loose_max_parallel_degreeパラメータが 0 に設定されていることを確認して、ePQ が完全に無効になっていることを確認します。説明loose_max_parallel_degreeパラメータは、個々のクエリの最大 DOP を指定します。これは、クエリを並列で実行するために使用されるワーカーの最大数です。詳細については、「構成パラメータ」をご参照ください。
ePQ を構成する
ePQ 機能を管理するための一連のパラメータを構成できます。 次の表に、いくつかの主要なパラメータを示します。詳細については、「DOP ポリシー」をご参照ください。
タイプ | 説明 |
適応 DOP 設定 |
|
オプティマイザが ePQ を有効にできるかどうかを指定する | PolarDB は、オプティマイザが elastic parallel query 機能を有効にできるかどうかを指定するための 2 つのしきい値を提供します。SQL 文が次のいずれかの条件を満たしている場合、オプティマイザは elastic parallel query 機能を有効にします。
|
複数ノード ePQ を有効にするかどうかを指定する | PolarDB は、複数ノード elastic parallel query を有効にするかどうかを指定するための 2 つのしきい値を提供します。SQL 文が次のいずれかの条件を満たしている場合、複数ノード elastic parallel query を使用できます。
|
ヒントを使用して ePQ を制御する
ヒントを使用してオプティマイザが ePQ を有効にするかどうかを指定することで、個々の SQL 文を最適化できます。また、ヒントを使用して、DOP と ePQ を有効にする必要があるテーブルを構成することもできます。たとえば、ePQ がシステムによって無効になっている場合、ヒントを使用して、頻繁に実行されるスロー 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 はアクセスされるデータの各行をロックします。したがって、行ロックがかかっているレコードの数は、非並列実行の場合よりも多くなる可能性があります。この現象は、並列実行の場合には正常です。



