概要
PGTuneを使って、postgresqlのチューニングをしたときの作業メモです。
手順
設定値を自動生成する
PGTuneを使って設定値を自動生成します。
現在の設定値を確認する。
psqlから以下をたたきます。PGTuneが出力した設定と見比べて問題がないか確認します。
SHOW max_connections; SHOW shared_buffers; SHOW effective_cache_size; SHOW maintenance_work_mem; SHOW checkpoint_completion_target; SHOW wal_buffers; SHOW default_statistics_target; SHOW random_page_cost; SHOW effective_io_concurrency; SHOW work_mem; SHOW min_wal_size; SHOW max_wal_size; SHOW max_worker_processes; SHOW max_parallel_workers_per_gather; SHOW max_parallel_workers;
設定を反映する
psqlからPGTuneのAlter Systemにあるコマンドをたたきます。
これを実行すると、postgresql.auto.confに設定値が書き込まれるので、次回起動時には設定が反映されますが、そのままだと現在のプロセスに設定が反映されません。SHOW max_connections;
などを実行してみると、反映されていないことが分かると思います。
なので、postgresqlを再起動するか、pg_reload_conf()、pg_ctl reload、SIGHUPで現在のプロセスを再起動せずに設定を反映させます。
詳細は以下を参照
https://www.postgresql.jp/document/9.6/html/sql-altersystem.html
# DB Version: 10
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 8 GB
# CPUs num: 8
# Connections num: 100
# Data Storage: ssd
ALTER SYSTEM SET
max_connections = '100';
ALTER SYSTEM SET
shared_buffers = '2GB';
ALTER SYSTEM SET
effective_cache_size = '6GB';
ALTER SYSTEM SET
maintenance_work_mem = '512MB';
ALTER SYSTEM SET
checkpoint_completion_target = '0.7';
ALTER SYSTEM SET
wal_buffers = '16MB';
ALTER SYSTEM SET
default_statistics_target = '100';
ALTER SYSTEM SET
random_page_cost = '1.1';
ALTER SYSTEM SET
effective_io_concurrency = '200';
ALTER SYSTEM SET
work_mem = '5242kB';
ALTER SYSTEM SET
min_wal_size = '1GB';
ALTER SYSTEM SET
max_wal_size = '2GB';
ALTER SYSTEM SET
max_worker_processes = '8';
ALTER SYSTEM SET
max_parallel_workers_per_gather = '4';
ALTER SYSTEM SET
max_parallel_workers = '8';
pg_reload_confで設定を反映
SELECT pg_reload_conf();
pg_ctl reloadで設定を反映
調べていません。pg_reload_confで十分だと思います。
SIGHUPで設定を反映
postgresの親プロセスを探す
ps axuf | grep postgres
SIGHUPを送る
kill -HUP [postgresのpid]