PostgreSQLのチューニング設定
データ分析用PostgreSQLを本番環境へインストールしてチューニングしたときの覚書。
環境: CentOS Stream 8, PostgreSQL 14.2
Autovacuumの設定
autovacuumはデフォルトで有効。
track_countsもデフォルトでオンになっているので、特に設定しなかった。
参考: PostgreSQL: Documentation: 14: 20.10. Automatic Vacuuming
参考: autovacuumのチューニング要素について考えてみる - Qiita
サーバーに合わせたチューニング設定
下記サイトを参考にしながら設定した。
- チューニング ~データベースチューニング~|PostgreSQLインサイド : 富士通
- 【PostgreSQL】PostgreSQLのチューニング(設定編) - PEOPLE Engineering Blog
# su - postgres
$ cd 14/data/
$ less postgresql.conf
max_connections = 200shared_buffers = 512MBwork_mem = 8MBmaintenance_work_mem = 256MB
rootに戻って再起動
# systemctl restart postgresql-14
# systemctl status postgresql-14
状態を監視
PostgreSQLでは組み込みの統計情報表示用Viewが用意されている。
参考サイト
- PostgreSQL: Documentation: 14: 28.2. The Statistics Collector
- PostgreSQLモニタリング機能の現状とこれから(Open Developers Conference 2020 Online 発表資料
- データベースシステムの監視 ~監視方法と監視例~|PostgreSQLインサイド : 富士通
縦表示にして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でキャンセル
【関連記事】