0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLのバックグラウンドプロセス

0
Last updated at Posted at 2025-12-04

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自体の挙動に係るパラメタはない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?