2017-09-06 10 views
1

Chris PettusのYoutubeビデオに続いて、PostgreSQL Proficiency for Python Peopleが私のpostgres.conf設定の一部を編集しました。私が変更したいくつかのpostgresql.conf設定の理解

私のサーバーには28ギガのRAMがあり、変更する前に私のシステムメモリは平均約3GBでした。今それは約10ギガバイトです。

max_connections = 100 
shared_buffers = 7GB 
work_mem = 64mb 
maintenance_work_mem = 1GB 
wal_buffers = 16mb 

私は今何か問題はありませんが、私が行った変更の賛否両論を理解したいと思います。自分のシステムで使用されている平均メモリを3倍にするという具体的なメリットがあるはずです(Datadogで測定)。

私のサーバーはETL(Airflow)を実行し、データベースをホストするために使用されます。気流には多くの接続がありますが、通常はファイルがかなり小さく(数MB)、パンダで処理され、データベースと比較して新しい行を見つけてロードされます。

+1

以前の設定が何であったか – birryree

+1

参照[サーバーの構成](https://www.postgresql.org/docs/current/static/runtime -config.html)、特に[Resourc e Consumption](https://www.postgresql.org/docs/current/static/runtime-config-resource.html) –

+0

デフォルトの9.6の設定だけです。特定の接続を可能にするために、hba以外のconfファイルには触れていませんでした。 – trench

答えて

3

共有バッファは、postgresメモリキャッシュ(OSキャッシュと比較してポストグラムに近い低レベル)に使用されます。 7GBに設定すると、pgが7GBのデータにキャッシュされます。したがって、パフォーマンスを向上させる可能性がある完全なテーブルスキャンまたは(再帰的な)CTEをたくさん実行している場合。 postgresマスタープロセスはデータベースの起動時にこの総量を割り当てます。そのため、あなたのOSで10GBのRAMが使用されているのがわかります。

work_memはソート用に使用され、はそれぞれ並行ソートでこのサイズのバケットを割り当てます。したがって、これはmax_connections *並行ソートによってのみ制限されます。したがって、効率的にはのみがクエリのソートの複雑さによって制限されるため、これを増やすとシステムの安定性が最大になります。 (つまり、クエリプランナが8つのマージソートで実行する1つのクエリがある場合は、クエリが実行されるたびに8 * work_memを使用します)。

maintenance_work_memが、これはVACUUM速度を上げることが増加!ALTER TABLE ADD FOREIGN KEY含むVACUUMや友人(で使用されるメモリである。

wal_buffersは、サーバーが一度に書き込みます最大のWALチャンクで16メガバイト、超えて何のメリットがありません。このI/Oの遅い書き込みを支援することができます

も参照してください:?https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server

+0

ありがとうございます。それは有益だった。 – trench

+1

8K(ページ・ページ・サイズ)を超える 'text'を含む行のようなTOAST可能な(' varlena')データ型を扱う場合は、OSキャッシュも重要です。なぜなら_pointers_からTOASTされた属性値は 'shared_buffers'にキャッシュされ、実際の値は別のファイルに格納されます。 (https://www.postgresql.org/docs/current/static/storage-toast.htmlを参照) – cowbert

関連する問題