コンテンツにスキップ

設定ファイル@PostgreSQL

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. セットアップ

インストール

▼ dnfリポジトリから

psqlコマンドのみをインストールしたい場合

$ dnf install -y postgresql


動作確認

▼ ステータス確認

PostgreSQLのプロセスが稼働していることを確認する。

$ systemctl status postgresql-13.service

▼ コネクション確認

DBに接続する。

# psql -U foo-user -h *.*.*.* -p 5432 -d foo-db
$ psql -U <ユーザー名> -h <DBホスト名> -p <ポート番号> -d <DB名>

パスワードをpsqlコマンドに渡す場合、環境変数か.pgpassファイルで定義する。

<IPアドレス>:<ポート番号>:<DB名>:<ユーザ名>:<パスワード>
$ export PGPASSWORD=<パスワード>

▼ オートバキュームの手動実行

# 全てのテーブルを指定する
$ vacuum
# 特定のテーブルを指定する
$ vacuum <テーブル名>


02. セクション

autovacuum

オートバキュームを有効化する

autovacuum = on

▼ オートバキュームとは

PostgreSQLは、オートバキュームによってDB上の残骸タプルを自動的に削除する。

デッドタプル率 (DBのストレージ全体量に対するタプル量) がn%以上になると、PostgreSQLはオートバキュームを実行するように設定できる。

オートバキュームではDBで削除処理が実行されるため、ハードウェアリソースの消費量が高まってしまう。

今回のオートバキュームと次回のそれの間で実行できるトランザクションは20億回と決まっているため、ある程度の間隔でオートバキュームを実行する必要がある。

▼ タプルと残骸タプル

テーブルのレコード (行) のこと。

PostgreSQLでレコードをUPDATE/DELETEすると、操作前のレコードは削除されずに残骸となる。

これを削除するために、オートバキュームが必要である。


log_directory

▼ log_directoryとは

実行ログの出力先のディレクトリを設定する。

log_directory = /var/lib/pgsql

▼ ログローテーション

ログローテーションによって、ログファイルを分割して保管しておく。

log_directoryオプションで設定したディレクトリ配下で、PostgreSQLは、ログローテーションされたログファイルを配置する。

$ ls -la /var/lib/pgsql

drwx------.  2 postgres postgres      4096  7月  4  2022 .
drwx------. 20 postgres postgres      4096  1月 07 00:00 ..
-rw-------.  1 postgres postgres 155406014  1月 01 00:00 postgresql-Sun.log
-rw-------.  1 postgres postgres 171692688  1月 02 00:00 postgresql-Mon.log
-rw-------.  1 postgres postgres 145817641  1月 03 00:00 postgresql-Tue.log
-rw-------.  1 postgres postgres 145711063  1月 04 00:00 postgresql-Wed.log
-rw-------.  1 postgres postgres 184520145  1月 05 00:00 postgresql-Thu.log
-rw-------.  1 postgres postgres 150962818  1月 06 00:00 postgresql-Fri.log
-rw-------.  1 postgres postgres 120718679  1月 07 00:00 postgresql-Sat.log

▼ クエリの確認

実行ログから、クエリを確認できる。

$ cat /var/lib/postgresql-Sun.log | grep -E "^2023-01-01 12:00" | grep "statement: SELECT"

$ cat /var/lib/postgresql-Sun.log | grep -E "^2023-01-01 12:00" | grep "statement: INSERT"


log_line_prefix

▼ log_line_prefixとは

ログのプレフィクスの形式を設定する。

log_line_prefix = '%m [%p]: user=%u,db=%d,app=%a,client=%r,xid=%x '


log_min_duration_statement

スロークエリログを出力する場合に、スロークエリと見なす閾値秒数を設定する。

log_min_duration_statement = 100ms


logging_collector

標準エラー出力などに出力されるログを、ログファイルに出力する。

logging_collector = on