web-dev-qa-db-ja.com

Postgresql 10-並列構成

並列を有効にして最適化を行うための4つの構成がありますが、PostgreSQLの documentation は値や計算について何も述べていません。私の質問は:

1- max_parallel_workersmax_parallel_workers_per_gathermax_worker_processesの値を計算する方法は?

2- work_memは接続とメモリ(RAM)に基づいて計算できますが、パラレルを有効にするとwork_memは何かを変更する必要がありますか?

私の推測は:マシンに8つのコアがある場合the max_parallel_workersが8で、ワーカープロセスとギャザーあたりの値が32(8 * 4)の場合、元の構成から取得した4は、1パラレルあたり4ギャザーです。作業。

9
HudsonPH

いくつかの検索の結果、いくつかの回答が見つかりました。これは、4つのコア(CPU)がある場合に、有効にして基本構成を取得したい人に役立ちます。

最大ワーカープロセスはコアの量であり、最大並列数は同じ量である必要があります。

max_worker_processes = 4
max_parallel_workers = 4

この値はニーズとリソースに基づいて操作できるため、収集はより複雑になります。最適な値を取得するにはテストする必要がありますが、起動値にはcores/2を使用できます。

max_parallel_workers_per_gather = 2

これは最終的な回答ではありませんが、いくつか不足している点があります...私はまだこの回答を検索して更新するか、より良い回答を待っています。

1
HudsonPH

質問は明白ですが、答えは明白ではありません。

私が説明しようとすることは少し広いので、何かがあなたに明白に聞こえるなら-ただそれをスキップしてください。

まず、それがどのように機能するかをここで説明します ここ 。そのパラメーターの目的は here で説明されています。つまり、PGには、バックグラウンドで何かを実行できるプロセスのプールがあります。それらの最大数はmax_worker_processesによって制限されます。テーブルスキャンを実行すると、時間がかかる場合があるため、データを取得するプロセスを増やすことをお勧めします。それは、バックグラウンドワーカーによって実行できます。それらによって実行できるクエリプランノードは、gathergather-mergeです。

各バックグラウンドワーカーには、実行に関連する並べ替えやその他のもののためのメモリがあります。それらは常に存在するので、システムがスワップを使用していないことを確認するために、それを念頭に置いておくことをお勧めします...

それに加えて。クエリごとのワーカーの最適な数を見つけるようにしてください-デフォルトでは2です。したがって、すべてが正常に機能する場合、データの収集に2つのバックグラウンドワーカーが使用されます。次の質問は、並列実行されるクエリの数です。つまり、並列処理を必要とする重いクエリです。その2つの数値で言うと、クエリごとに4つのワーカーと10のクエリがあり、40のワーカーが必要ですが、それだけです。これで問題ないかどうかを計算したり、実験したりできます。この方法または他の方法-パラメータがもう1つあります-max_worker_processes。並列処理用に40のワーカーを用意すると、レプリケーションなどの他のタスクにさらにワーカーが必要になります。

その40は合理的に聞こえますか?ここには2つのカウンターポイントがあります。デフォルトでは、PGはOLTPデータベースです。したがって、システムは何か他の準備ができており、そのような変更によって良い結果がもたらされる可能性があります。一方、1つありますbgwriterなので、結局のところ、IOを処理するプロセスが1つあります。それはシステムに依存していますが、それでも1つのプロセスです。

したがって、答えは完璧とはほど遠いです。自分で統計を収集して決定する必要があります。

1

メインのpostgresql.conf値を設定するのに役立つ素敵な小さなオンライン設定ユーティリティがあります。

それは完璧ではありませんが、役に立つかもしれない出発点を提供します。

https://pgtune.leopard.in.ua/#/

0
Jimski