PostgreSQLのバックグラウンドプロセス
PostgreSQLのバックグラウンドプロセスと、関連パラメタ、それらによる挙動を整理する。
2025/11時点でOSS-DB Goldの対象バージョンである、PostgreSQL 14をベースに整理。
バックグラウンドプロセスの名前は以下コマンドで取得できる、CMD列の記載を採用。
ps -ef | grep postgres
logger
ログをファイルに出力するプロセス。
logging_collector = onの設定により、サーバプロセスの起動時に起動される。
詳細なパラメタはマニュアルを参照。主要な関連パラメタは以下の通り。
| パラメタ名 | デフォルト値 | 指定できる値 | 説明 |
|---|---|---|---|
| logging_collector | on | on / off | ログ収集機構のon/offを制御。 |
| log_destination | stderr | stderr,syslog,csvlog,eventlog(Winのみ) | ログの出力先を指定。複数指定可能。 |
| log_directory | log | 絶対パス / DBクラスタのディレクトリからの相対パス | ログファイルが作成されるディレクトリを指定。 |
| log_filename | postgresql-%Y-%m-%d_%H%M%S.log | ファイル名 | ログファイルのファイル名を設定。%エスケープを使用して、時刻によって変動するファイル名を指定可能。 |
| log_file_mode(Unixシステムのみ有効) | 384 | chmodで許容されるフォーマット | ログファイルのパーミッションを設定。 |
| log_rotation_age | 1440(24時間) | 0~35791394 | 個々のログファイルの最大寿命を設定[*1]。0は時間に基づいた新しいログファイルの生成が無効になる。 |
| log_rotation_size | 0 | 0~2097151(KiB) | 個々のログファイルの最大容量を設定。ここで指定したデータ量がログファイルに出力された後、新しいログファイルが生成される。単位なしで指定するとKiB単位とみなす。 |
| log_truncate_on_rotation | off | on/off | ログのローテーションが発生したときに、初期化した同名ファイルを利用するか、または同名の既存ファイルに追記するかを制御。時間でのローテーションが発生した場合にのみ有効[*2]。 |
[*1]例えば60を指定した場合、log_filenameに「%H」がないとファイル名は変わらず、元のファイルに追記 or 上書きとなる。追加 or 上書きはlog_trancate_on_rotationにより制御。
[*2]サーバ起動時または、サイズ起因のローテーションの場合、切り詰めは起こらない。
checkpointer
自動的にチェックポイントを実行するプロセス。
checkpoint_timeout秒の経過か、またはmax_wal_sizeに達するとチェックポイントを開始。
詳細なパラメタはマニュアルを参照。主要な関連パラメタは以下の通り。
| パラメタ名 | デフォルト値 | 指定できる値 | 説明 |
|---|---|---|---|
| checkpoint_timeout | 300 | 30~86400 | チェックポイントの最大間隔を指定。単位なしで指定すると秒単位とみなす。 |
| checkpoint_completion_target | 0.9 | 0~1 | チェックポイントのI/O負荷の分散に関わるパラメタ。チェックポイントの間の時間のうち、どの程度の割合を目標にチェックポイント処理を完了させるかを指定。 |
| max_wal_size | 1GB | 2~2147483647 | 自動WALチェックポイントの際にWALが増加する最大サイズ。ソフトリミットのため、特別な状況下[*1]でWALサイズがmax_wal_sizeを超えることがある。単位なしで指定するとMiB単位とみなす。 |
| min_wal_size | 80 | 2~2147483647 | WALファイルを保持するディスク量を指定。単位なしで指定するとMiB単位とみなす。 |
[*1]高負荷、archive_commandの失敗、wal_keep_sizeが大きな値に設定されているなど。
background writer
新規または更新された、所謂「ダーティ」な共有バッファの書き込みを行うプロセス。
詳細なパラメタはマニュアルを参照。主要な関連パラメタは以下の通り。
| パラメタ名 | デフォルト値 | 指定できる値 | 説明 |
|---|---|---|---|
| bgwriter_delay | 200 | 10~10000 | バックグラウンドライタの動作間隔を指定。指定の間隔で一部のダーティバッファの書き込みを実施。なお、バッファプールにダーティバッファが存在しない場合、指定値より長くスリープする。単位なしで指定するとms単位とみなす。 |
| bgwriter_lru_maxpages | 100 | 0~1073741823 | バックグラウンドライタの動作ごとに、書き込まれるバッファの最大数を指定。 |
| bgwriter_lru_multiplier | 2 | 0~10 | バックグラウンドライタの動作ごとに書き出されるダーティバッファ数は、直近のバックグラウンドライタ動作時にサーバプロセスが必要とした新しいバッファ数を基にする。次の動作で必要となるバッファ数を推定するために、直近必要とされたバッファ数の平均がbgwriter_lru_multiplierと乗算される。ダーティバッファの書き出しは、同数の整理済、再利用可能[*1]なバッファが利用できるようになるまで行われる。ただし、動作ごとに書き出すバッファの上限はbgwriter_lru_maxpagesが上限。 |
[*1]
整理済:ダーティバッファがディスクへ書き戻され、クリーンになったバッファ。
再利用可能:ディスク読込時から更新されていない、クリーンなバッファ。
walwriter
定期的にWALバッファをディスクに書き出すプロセス。
詳細なパラメタはマニュアルを参照。主要な関連パラメタは以下の通り。
| パラメタ名 | デフォルト値 | 指定できる値 | 説明 |
|---|---|---|---|
| wal_writer_delay | 200 | 1~10000 | WALライタの動作間隔を指定。単位なしで指定するとms単位とみなす。最後のflushがwal_writer_delay以内に行われ、かつそれ以降wal_writer_flush_after相当のWALが生成されていない場合、WALをwriteするが、flushはされない。 |
| wal_writer_flush_after | 128(1MiB) | 0~2147483647 | WALライタがWALをflushする頻度を量で指定。最後のflushがwal_writer_delay以内に行われている場合の挙動はwal_writer_delayの説明に記載の通り。このパラメタが0に設定されている場合は、WALデータが書かれるたびにWALが即時にflushされる。単位なしで指定するとWALブロック単位(一般的に8KiB)とみなす。 |
autovacuum launcher
autovacuumのワーカを起動させる(ランチャ)デーモン。autovacuum = onの設定で起動。
詳細なパラメタはマニュアルを参照。主要な関連パラメタは以下の通り。
| パラメタ名 | デフォルト値 | 指定できる値 | 説明 |
|---|---|---|---|
| autovacuum | on | on / off | autovacuumランチャデーモンを実行すべきかどうかを指定。autovacuumを動作させるには、truck_countsも有効にする必要あり。 |
| autovacuum_max_workers | 3 | 1~262143 | 同時に実行できるautovacuumプロセス(ランチャ除く)の最大数を指定。 |
| autovacuum_naptime | 60 | 1~2147483 | あるDBに対して実行されるautovacuumデーモンの最小遅延を指定。それぞれの周期でデーモンはそのDBを確認し、DB内のテーブルで条件を満たすとVACUUMおよびANALYZEを発行する。単位なしで指定すると秒単位とみなす。 |
| autovacuum_vacuum_threshold | 50 | 0~2147483647 | autovacuumを起動するために必要な、更新または削除されたタプルの最小数を指定。 |
| autovacuum_vacuum_insert_threshold | 1000 | -1~2147483647 | autovacuumを起動するために必要な、挿入タプルの最小数を指定。-1を指定すると、autovacuumが挿入タプル数に基づいて実行されることはなくなる。 |
| autovacuum_analyze_threshold | 50 | 0~2147483647 | autovacuumの延長でANALYZEを起動するのに必要な、挿入、更新、もしくは削除されたタプルの最小数を指定。 |
| autovacuum_vacuum_scale_factor | 0.2 | 0~100 | autovacuumを起動するか否かを決定するときに、autovacuum_vacuum_thresoldに足し算するテーブル容量の割合を指定。デフォルトは0.2(テーブルサイズの20%)。 |
| autovacuum_vacuum_insert_scale_factor | 0.2 | 0~100 | autovacuumを起動するか否かを決定するときに、autovacuum_vacuum_insert_thresoldに足し算するテーブル容量の割合を指定。デフォルトは0.2(テーブルサイズの20%)。 |
| autovacuum_analyze_scale_factor | 0.1 | 0~100 | ANALYZEを起動するか否かを決定するときに、autovacuum_analyze_thresholdに足し算するテーブル容量の割合を指定。デフォルトは0.1(テーブルサイズの10%)。 |
| autovacuum_freeze_max_age | 200000000 | 100000~2000000000 | トランザクションID周回を防ぐために、VACUUM操作が強制される前までに、テーブルのpg_class.relfrozenxidフィールドが到達できるトランザクションの最大年代を指定。 |
| autovacuum_multixact_freeze_max_age | 400000000 | 10000~2000000000 | トランザクションID周回を防ぐために、VACUUM操作が強制される前までに、テーブルのpg_class.relminmxidフィールドが到達できるマルチトランザクションの最大年代を指定。 |
archiver
完了したWALセグメントをアーカイブするプロセス。archive_mode = onの指定で起動。
詳細なパラメタはマニュアルを参照。主要な関連パラメタは以下の通り。
| パラメタ名 | デフォルト値 | 指定できる値 | 説明 |
|---|---|---|---|
| archive_mode | off | always / on / off | WALアーカイブの有効、無効を制御する。alwaysに設定すると、アーカイブリカバリおよびスタンバイモードでWALアーカイバが有効になる。この場合、アーカイブからリストアされたファイルや、ストリーミングレプリケーションでストリームされたファイルもすべてアーカイブされる。 |
| archive_command | '' | 完了したWALセグメントのアーカイブを実行する、ローカルのシェルコマンドを指定。文字列内の%pは格納されるファイルのパスで置き換えられ、%fはファイル名のみ置換する。コマンドが成功した場合にのみ終了ステータス「0」を返すよう指定。 | |
| archive_timeout | 0 | 0~1073741823 | 指定時間ごとに強制的にWALセグメントの切り替えを実施。ただし、前回のセグメントファイル切替から単一のチェックポイントを含む、何らかのデータベース操作が行われた場合にのみ、切替を実施する。単位なしで指定すると秒単位とみなす。 |
stats collector
サーバの活動状況に関する情報を収集し、報告するプロセス。以下を実施。
- テーブルとインデックスへのアクセスをディスクブロックおよび行単位で数える
- 各テーブル内の総行数および各テーブルでのVACUUMやANALYZEの実施情報を追跡
- ユーザ定義関数の呼ばれた回数と消費した総時間を数える
詳細なパラメタはマニュアルを参照。主要な関連パラメタは以下の通り。
| パラメタ名 | デフォルト値 | 指定できる値 | 説明 |
|---|---|---|---|
| track_activities | on | on / off | 各セッションで実行中のコマンドに関する情報と、そのコマンドの識別子および実行開始時刻の収集を有効にする。 |
| track_counts | on | on / off | データベースの活動の統計情報を有効にする。autovacuumデーモンがこの情報を必要とする。 |
| track_functions | none | none / pl / all | 関数の呼び出し数と費やされた時間の追跡を有効にする。手続き言語関数のみを追跡するにはplと指定。SQL関数、C言語関数も追跡するにはallと指定。noneは無効。 |
| track_io_timing | off | on / off | データベースによるI/O呼び出しの記録を有効にする。現時点の時刻をOSに繰り返し問い合わせるので、PFによっては深刻な負荷の原因となるため、利用には注意が必要。 |
| track_wal_io_timing | off | on / off | データベースによるWAL I/Oの呼び出しの記録を有効にする。現時点の時刻をOSに繰り返し問い合わせるので、PFによっては深刻な負荷の原因となるため、利用には注意が必要。 |
logical replication launcher
ロジカルレプリケーションのworkerを起動するための常駐プロセス。
直接launcher自体の挙動に係るパラメタはない。