PostgreSQL_パラレルクエリ

パラレルクエリは複数のプロセスで並列処理をする。
その中でもリーダープロセスとワーカープロセスがある。
リーダープロセスが必要な数のワーカープロセスを作る。
ワーカープロセスは結果をリーダーに返す。

※パラレルクエリはハード(CPU)によってできないことがある。CPUがマルチスレッドに対応している必要がある。
UPUが一つでもコアが複数あればOK

max_parallel_workers
max_parallel_workers_per_gather

パラメータ名 デフォルト値 設定反映のタイミング 説明 詳細
max_worker_processes 8 PostgreSQL起動時 パラレルクエリを含む、PostgreSQLの動的プロセスの生成最大数を指定 この設定は、システム全体で使用できるワーカープロセス(これにはパラレルワーカーだけでなく、論理レプリケーションやカスタムバックグラウンドワーカーなどの他のワーカーも含まれます)の最大数を設定します。
この設定のデフォルト値は8です。ただし、この値はシステムのCPUコア数によって調整することが推奨されます。つまり、システムに利用可能なCPUコア数よりも多くのワーカープロセスを設定することは推奨されません。
この設定は、PostgreSQLの設定ファイル(通常は postgresql.conf)で調整でき、設定を反映させるためにはPostgreSQLサーバーの再起動が必要です。
max_parallel_workers 8 任意のタイミング 動的プロセスの最大数のうち、パラレルクエリ用に使う動的プロセスの最大数を指定 データベースクラスタ全体で同時にアクティブにできる並列ワーカープロセスの最大数を設定します。
この値はmax_worker_processes以下でなければなりません。
また、max_parallel_workers_per_gatherというパラメータもあり、これは単一のクエリで使用できる並列ワーカープロセスの数を制限します。
つまり、max_parallel_workersは全体の制限を、max_parallel_workers_per_gatherはクエリごとの制限を設定します。
max_parallel_workers_per_gather
マックス・パラレル・ワーカーズ・パー・ギャザー
2 任意のタイミング パラレルクエリで実施されるスキャンや集計処理あたりの最大workerプロセス数 max_parallel_workers_per_gatherは、PostgreSQLの設定パラメータで、単一のクエリで使用できる並列ワーカープロセスの最大数を設定します。つまり、このパラメータはクエリごとの並列ワーカープロセスの制限を設定します。

クエリの実行中にGatherノードに到達すると、プランナが選択したワーカーと同じ数のバックグラウンドワーカープロセスが要求されます。プランナが使用を検討するバックグラウンドワーカーの数は、最大でもmax_parallel_workers_per_gatherに制限されます。ある時点で存在できるバックグラウンドワーカーの数は、max_worker_processesとmax_parallel_workersの両方を満たすように制限されます。

このパラメータを調整することで、必要に応じてより多くのワーカーを起動したり、プランナが要求するワーカーの数を減らしたりすることができます。ただし、利用可能なワーカーの数によって最適なプランが変わることもあるため、この値を適切に設定することが重要です。具体的な値は、PostgreSQLのバージョンやシステムの状況によりますが、一例として、ある設定ではmax_parallel_workers_per_gatherを7に設定しています。

min_parallel_table_scan_size 8MB 任意のタイミング パラレル処理対象とするテーブルサイズの最小サイズ指定 パラレルスキャンを考慮する最小のテーブルデータのサイズを指定します。この設定により、テーブルのデータ量が一定のサイズ以上である場合にのみ、パラレルスキャンが行われます。具体的には、min_parallel_table_scan_sizeのデフォルト値は8MBです。これは、テーブルのデータ量が8MB以上である場合にのみ、パラレルスキャンが考慮されることを意味します。この値を増やすと、より大きなテーブルに対してのみパラレルスキャンが行われ、逆にこの値を減らすと、より小さなテーブルに対してもパラレルスキャンが行われるようになります。

ただし、この設定はあくまで「考慮」する最小サイズを指定するものであり、必ずしもパラレルスキャンが行われるわけではありません。パラレルスキャンが実際に行われるかどうかは、他の多くの要因(クエリの種類、システムの負荷状況、他の設定パラメータの値など)によります。

min_parallel_index_scan_size 521MB 任意のタイミング パラレル処理対象とするインデックスサイズの最小サイズ指定 パラレルインデックススキャンを考慮する最小のインデックスデータのサイズを指定します。この設定により、インデックスのデータ量が一定のサイズ以上である場合にのみ、パラレルインデックススキャンが行われます。具体的には、min_parallel_index_scan_sizeのデフォルト値は512KBです。これは、インデックスのデータ量が512KB以上である場合にのみ、パラレルインデックススキャンが考慮されることを意味します。この値を増やすと、より大きなインデックスに対してのみパラレルインデックススキャンが行われ、逆にこの値を減らすと、より小さなインデックスに対してもパラレルインデックススキャンが行われるようになります。

ただし、この設定はあくまで「考慮」する最小サイズを指定するものであり、必ずしもパラレルインデックススキャンが行われるわけではありません。パラレルインデックススキャンが実際に行われるかどうかは、他の多くの要因(クエリの種類、システムの負荷状況、他の設定パラメータの値など)によります。

 

Author: gaa

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です