このトピックでは、elastic parallel query (ePQ) 機能の使用方法について説明します。
使用上の注意
読み取り専用ノードとプライマリノードはどちらも、エラスティック並列クエリ機能をサポートしています。 弾性並列クエリ機能は、デフォルトでプライマリノードでは無効になっています。
elastic parallelクエリの有効化
PolarDBコンソールの [概要] ページの [クラスターエンドポイント] セクションで、[変更] をクリックします。 [ノードの設定] ページで、DOPと並列エンジンを設定します。 詳細については、「PolarProxyの設定」の「Parallel Queryパラメーター」をご参照ください。
次の並列クエリ設定を使用することを推奨します。
マルチノードエラスティック並列クエリは、コストとリアルタイムのクラスター負荷に基づく適応型タスクスケジューリングをサポートします。 高速化のために、マルチノードelastic parallelクエリを有効にすることを推奨します。
max_parallel_degreeパラメーターの値を少しずつ増やします。 CPUコアの総数の4分の1を超える値は使用しないことを推奨します。 たとえば、max_parallel_degreeパラメーターを2に設定した後、翌日にCPU使用率を確認できます。 CPU使用率が低い場合は、max_parallel_degreeパラメーターの値を増やします。 CPU使用率が高い場合は、値を上げないでください。
DOPは、1つのクエリに対して1つの計算ノードで同時に実行できるワーカースレッドの最大数を指定します。 マルチノードelastic parallelクエリを選択した場合、1つのクエリで同時に実行できるワーカースレッドの最大数は、DOPとノード数の積です。
エラスティック並列クエリ機能を有効にする場合は、innodb_adaptive_hash_indexパラメーターをOFFに設定します。 innodb_adaptive_hash_indexパラメーターがONに設定されている場合、並列クエリのパフォーマンスは低下します。
PolarDBコンソールでエラスティック並列クエリ機能を有効にせず、max_parallel_degreeパラメーターを0より大きい値に設定すると、エラスティック並列クエリ機能が自動的に有効になります。
PolarDBコンソールでエラスティック並列クエリ機能を有効にし、max_parallel_degreeパラメーターを設定した場合、PolarDBコンソールに表示される設定が優先されます。 PolarDBコンソールでエラスティック並列クエリ機能を有効にすることを推奨します。
並列クエリの無効化
PolarDBコンソールの [概要] ページの [クラスターエンドポイント] セクションで、[変更] をクリックします。 [ノードの設定] ページで、エラスティック並列クエリ機能を無効にできます。 詳細については、「PolarProxyの設定」をご参照ください。
PolarDBコンソールでエラスティック並列クエリ機能を無効にした後、エラスティック並列クエリ機能が無効になっていることを確認するために、max_parallel_degreeが0に設定されていることを確認する必要があります。
ヒントの使用
ヒントを使用して、個々のSQLステートメントを最適化できます。 たとえば、エラスティック並列クエリ機能がシステムによって無効になっている場合、ヒントを使用して、頻繁に実行される低速のSQLクエリを高速化できます。 詳細については、「並列ヒント」をご参照ください。
しきい値を使用してオプティマイザがエラスティック並列クエリを有効にできるかどうかを指定する
PolarDBには、オプティマイザがエラスティック並列クエリ機能を有効にできるかどうかを指定する2つのしきい値があります。 SQL文が次のいずれかの条件を満たしている場合、オプティマイザはエラスティック並列クエリ機能を有効にします。
records_threshold_for_parallelism
スキャンされた行の数がrecords_threshold_for_parallelismの値を超える場合、オプティマイザはエラスティック並列クエリ機能を有効にします。 デフォルトの値は 10,000 です。 クエリの大部分が単純で、少量のデータしか含まない場合は、しきい値を少なくとも2000に設定することをお勧めします。
説明スキャンされた行の数は、テーブルの統計に基づいて推定されます。 この数は、実際の行数とは異なる可能性があります。
cost_threshold_for_parallelism
シーケンシャルクエリのコストがcost_threshold_for_parallelismの値を超える場合、オプティマイザはエラスティックパラレルクエリ機能を有効にします。 デフォルト値は50000です。
しきい値を使用してマルチノードエラスティックパラレルクエリを有効にするかどうかを指定する
PolarDBには、マルチノードelastic parallelクエリを有効にするかどうかを指定する2つのしきい値があります。 SQL文が次のいずれかの条件を満たしている場合、マルチノードelastic parallelクエリを使用できます。
records_threshold_for_mpp
クエリステートメントに含まれるテーブルのスキャン行数がこのしきい値を超える場合、オプティマイザーはマルチノードエラスティックパラレルクエリの使用を検討し、計算のために複数のノードに並列タスクをスケジュールします。 デフォルト値は、records_threshold_for_parallelism値のN倍です。 N値は、現在のクラスターエンドポイントに含まれるノードの数です。
cost_threshold_for_mpp
クエリ文の逐次実行コストがこのしきい値を超える場合、オプティマイザはマルチノードエラスティック並列クエリの使用を検討します。 デフォルト値は、cost_threshold_for_parallelism値のN倍です。 N値は、現在のクラスターエンドポイントに含まれるノードの数です。