zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【postgres】JOINが多用されてて重い時はpostgresql.confのwork_memを増やそう

postgresでJOINを多用している処理が激重だったので臨時対応したメモ

【参考】

qiita.com

→work_memの最大は(実メモリ-shared_buffers)/max_connections
→work_memの経験は実メモリ/max_connections/[4-16]

PostgreSQLのチューニング その1 – Mindcircus.jp

→work_mem = 搭載メモリ / max_connections / 4

PostgreSQLパラメータ作成サイト
pgtune.leopard.in.ua



【作業メモ】

cat /var/lib/pgsql/data/postgresql.conf

max_connections = 100                   # (change requires restart)
#work_mem = 1MB                         # min 64kB

→現サーバのメモリは1GBなので
work_mem =1024/100/4 = 2.56

max_connections = 100                   # (change requires restart)
work_mem = 2MB                          # min 64kB

これだとあまりかわらなかった

max_connections = 10                    # (change requires restart)
work_mem = 25MB                         # min 64kB

これだと劇的に高速化した。

あくまで一例ですが。

■おまけ

# 現在実行中のクエリを確認
SELECT * FROM pg_stat_activity;

# 重いプロセスをkill
SELECT pg_cancel_backend(procpid);