PostgreSQLのチューニング設定

データ分析用PostgreSQLを本番環境へインストールしてチューニングしたときの覚書。

環境: CentOS Stream 8, PostgreSQL 14.2


Autovacuumの設定

autovacuumはデフォルトで有効。
track_countsもデフォルトでオンになっているので、特に設定しなかった。
参考: PostgreSQL: Documentation: 14: 20.10. Automatic Vacuuming
参考: autovacuumのチューニング要素について考えてみる - Qiita


サーバーに合わせたチューニング設定

下記サイトを参考にしながら設定した。

# su - postgres
$ cd 14/data/
$ less postgresql.conf

max_connections = 200
shared_buffers = 512MB
work_mem = 8MB
maintenance_work_mem = 256MB

rootに戻って再起動
# systemctl restart postgresql-14
# systemctl status postgresql-14


状態を監視

PostgreSQLでは組み込みの統計情報表示用Viewが用意されている。

参考サイト

縦表示にしてrecruitテーブルの統計情報を見てみる。
# su - postgres
$ psql
# \x
# select viewname from pg_views;
# select * from pg_stat_database where datname = 'recruit';

pg_backend_memory_contextsというメモリ状況を表示するViewを表示してみる。
参考: PostgreSQL: Documentation: 14: 52.67. pg_backend_memory_contexts
# \x
# select * from pg_backend_memory_contexts;

キロバイトに整形して表示。
# select name, round(total_bytes / 1000) as total_bytes, round(free_bytes/ 1000) as free_bytes, round(used_bytes/ 1000) as used_bytes, ident from pg_backend_memory_contexts order by total_bytes desc limit 50 ;

それを3秒ごとに定期実行。
# select name, round(total_bytes / 1000) as total_bytes, round(free_bytes/ 1000) as free_bytes, round(used_bytes/ 1000) as used_bytes, ident from pg_backend_memory_contexts order by total_bytes desc limit 50 ; \watch 3

これでバッチ処理などを動かして監視出来そう。
Ctrl-cでキャンセル


【関連記事】