PolarDB for MySQL では、エラスティック並列クエリ機能向けに 2 種類の設定項目を提供しています。1 つは PolarDB コンソールで設定するクラスターパラメーター、もう 1 つはランタイム時に参照可能なセッションレベルのステータス変数です。
パラレルクエリのパラメーター
PolarDB コンソール内のすべてのクラスターパラメーターには、MySQL 設定ファイルとの互換性を確保するため、loose_ プレフィックスが付与されています。PolarDB コンソールでパラメーターを変更する際は、loose_ プレフィックスを含むパラメーターを選択してください。
以下のパラメーターは、エラスティック並列クエリの動作を制御します。個々のクエリにおける並列処理の次数(DOP)、ワーカーの総予算、キューイング動作、および並列実行をトリガーする行数とコストのしきい値をカバーしています。
| パラメーター | スコープ | 説明 |
|---|---|---|
loose_max_parallel_degree | Global、session | 単一クエリにおける最大 DOP。そのクエリに対して使用されるパラレルワーカー数の上限を設定します。有効値:0~1024。デフォルト:0(エラスティック並列クエリ無効)。 |
loose_max_parallel_workers | Global | すべてのクエリで使用可能なパラレルワーカーの最大数。この上限を超えるクエリはキューに格納されます。有効値:1~10,000。デフォルト:CPU コア数の 2 倍。 |
loose_queuing_parallel_degree_limit | Global | 任意の時点においてキュー内に許容される DOP の合計上限。この上限を超えるクエリは順次実行にフォールバックします。有効値:0~10,000。デフォルト:64。 |
loose_pq_max_queuing_time | Global、session | クエリがキュー内で待機できる最大時間。この上限を超えるクエリは順次実行にフォールバックします。有効値:0~18,446,744,073,709,551,615。デフォルト:200(ミリ秒)。 |
loose_parallel_degree_policy | Global | 個別のクエリの DOP 選択ポリシーです。有効な値:TYPICAL、AUTO、REPLICA_AUTO(デフォルト)。詳細については、「DOP ポリシー」をご参照ください。 |
loose_records_threshold_for_parallelism | Session | オプティマイザが並列実行を検討するためにクエリがスキャンする必要のある最小行数。有効値:0~18,446,744,073,709,551,615。デフォルト:10000。 |
loose_cost_threshold_for_parallelism | Session | オプティマイザが並列実行を検討するために必要な順次実行コストの最小値。有効値:0~18,446,744,073,709,551,615。デフォルト:50000。 |
loose_records_threshold_for_mpp | Session | クエリ文に含まれるテーブルがスキャンする必要のある最小行数。この値を超えると、オプティマイザはマルチノードエラスティック並列クエリを検討します。有効値:0~18,446,744,073,709,551,615。デフォルト:0(N × loose_records_threshold_for_parallelism。ここで N はクラスター内のノード数)。 |
loose_cost_threshold_for_mpp | Session | オプティマイザがマルチノードエラスティック並列クエリを検討するために必要な順次実行コストの最小値。有効値:0~18,446,744,073,709,551,615。デフォルト:0(N × loose_cost_threshold_for_parallelism。ここで N はクラスター内のノード数)。 |
パラメーターに関する注意事項
`loose_max_parallel_degree`
PolarDB オプティマイザは、メインクエリとサブクエリをそれぞれ別の並列実行プランで実行できます。別々のプランを使用する場合、総ワーカー数はメインクエリとすべてのサブクエリのワーカー数の合計となり、サブクエリごとの loose_max_parallel_degree による制限を受けません。同じプランを使用する場合は、総ワーカー数が loose_max_parallel_degree を超えることはできません。
コンソールの設定と loose_max_parallel_degree の相互作用は次のとおりです。
PolarDB コンソールでエラスティック並列クエリが有効になっており、かつ
loose_max_parallel_degreeも設定されている場合、コンソールの設定が優先されます。ほとんどのシナリオでは、PolarDB コンソールでエラスティック並列クエリを有効にしてください。PolarDB コンソールでエラスティック並列クエリが無効になっているが、
loose_max_parallel_degreeが0より大きい値に設定されている場合、この機能は自動的に有効になります。
`loose_max_parallel_workers`
サーバーレスクラスターでは、loose_max_parallel_workers の値はノードスペックのスケーリングに応じて自動調整されます。キューイングポリシーの詳細については、「パラレルクエリのキューイングポリシーを定義するパラメーター」をご参照ください。
`loose_parallel_degree_policy`
| 値 | 動作 |
|---|---|
TYPICAL | データベースの負荷や CPU 使用率に関係なく、DOP は常に loose_max_parallel_degree に設定されます。 |
AUTO | オプティマイザは、データベースの負荷(CPU 使用率を含む)に基づいてエラスティック並列クエリを有効または無効にし、クエリコストに基づいて DOP を選択します。 |
REPLICA_AUTO(デフォルト) | 読み取り専用ノードは、データベースの負荷に基づいてエラスティック並列クエリを有効にするかどうかを判断し、クエリコストに基づいて DOP を選択します。プライマリノードはエラスティック並列クエリを実行しません。 |
`loose_records_threshold_for_parallelism`
ご利用のクエリのほとんどがシンプルで小規模データを扱うものである場合、不要な並列実行を回避するために、このしきい値を少なくとも 2000 に設定することを推奨します。
推奨設定
クラスター構成の初期設定として、以下のガイドラインをご利用ください。
| 目的 | 推奨事項 |
|---|---|
| パラレルクエリを有効化 | loose_max_parallel_degree を 0 より大きい値に設定するか、PolarDB コンソールでこの機能を有効にしてください。 |
| パラレルワーカーのリソース消費を制限 | パラレルクエリが過剰なリソースを消費している場合は、デフォルト値(CPU コア数の 2 倍)から loose_max_parallel_workers を減らしてください。Total_running_parallel_workers の観測値に基づいて調整します。 |
| OLTP ワークロードでの不要な並列化を回避 | ご利用のクエリのほとんどがシンプルで小規模データセットを対象とする場合、loose_records_threshold_for_parallelism を 2000 以上に引き上げてください。 |
| パラレルクエリを読み取り専用ノードに限定 | プライマリノードのパラレルクエリによるオーバーヘッドを回避するには、デフォルト値である loose_parallel_degree_policy = REPLICA_AUTO を使用してください。 |
| マルチノード並列クエリのチューニング | loose_records_threshold_for_mpp および loose_cost_threshold_for_mpp は、ノード数でスケーリングされたシングルノードのしきい値を継承するため、デフォルト値の 0 のままにしてください。マルチノード並列化が過剰にトリガーされる場合にのみ、これらの値を引き上げてください。 |
パラレルクエリの変数
以下のステータス変数を使用して、ランタイム時のエラスティック並列クエリをモニターしたり、特定のクエリで並列実行がトリガーされない理由を診断したりできます。SHOW GLOBAL STATUS または SHOW SESSION STATUS でこれらの変数を参照してください。
| 変数 | スコープ | 説明 |
|---|---|---|
Parallel_workers_created | Global、session | セッション開始以降に作成されたパラレルワーカーの総数。 |
Gather_records | Global、session | パラレルワーカーによって収集されたレコードの総数。 |
PQ_refused_over_total_workers | Global、session | パラレルワーカーの総数上限(loose_max_parallel_workers)に達したために順次実行にフォールバックしたクエリの数。 |
PQ_refused_over_max_queuing_time | Global、session | キュー待機時間が loose_pq_max_queuing_time を超過したために順次実行にフォールバックしたクエリの数。 |
Total_running_parallel_workers | Global | 現在実行中のパラレルワーカーの数。 |
PQ_refused_over_total_workers または PQ_refused_over_max_queuing_time が増加している場合、パラレルクエリはリソース競合によりスロットルされています。loose_max_parallel_workers または loose_pq_max_queuing_time を増やすことで、順次実行へのフォールバックを軽減できます。