LoginSignup
2
0

【PostgreSQL】プロセス構成について

Last updated at Posted at 2023-12-02

初めに

PostgreSQLのプロセスを知ることで、中で何が起きているのかを理解することができるようになります。例えばクエリ処理だけでなく、バッファの管理、ストレージへの書き込み制御、統計情報の収集などについてです。早速理解を深めていきましょう。

この記事で得られること

この記事を読み終えることで以下のメリットがあります。

  • PostgreSQLのプロセス構成の理解が深まる
  • PostgreSQLが好きになる。

プロセス構成

PostgreSQLのプロセスは以下のように構成されている
プロセス構成.png

それぞれのプロセスの詳細は以下の通り

プロセス名 説明
マスタサーバプロセス 最初に起動される親プロセス
ライタプロセス 共有バッファのデータをデータファイルに書き出す
WALライタプロセス WALをディスクに書き出すプロセス。WALバッファに書き込まれたWALをWALファイルに書き出す
チェックポインタプロセス チェックポイントを設定に従い、自動的に実行するプロセス
自動VACUUMランチャ 設定に従って自動バキュームワーカを起動する
自動VACUUMワーカ 設定に従って自動バキューム処理を行うプロセス
統計情報コレクタプロセス データベースの活動状況に関する稼働統計情報を一定感覚で収集するプロセス
バックエンドプロセス クライアントから接続要求を受けたときに生成されるプロセス
パラレルワーカプロセス パラレルクエリが実行される際に、バックエンドプロセスから起動されるプロセス
ロガー PostgreSQLのログをファイルへ書き出す
WALセンダ レプリケーション時にWALをスレーブサーバに転送する
WALレシーバ レプリケーション時にWALをマスタプロセスから受信する
バックグラウンドワーカ ロジカルレプリケーション用のワーカ。

プロセスの動き方

それぞれのプロセスについて把握したところで、次にプロセスがどのような動き方をするのか理解を深めていきましょう。

PostgreSQLサーバーの起動時

  1. postgres(マスタサーバ)が起動、以下のサブプロセスをフォーク
    a. WALライタ
    b. ライタ
    c. チェックポインタ
    d. 統計情報コレクタ
    e. 自動バキュームランチャ

クライアント接続からSQLの実行

  1. psqlやアプリからPostgreSQLサーバーに接続を要求すると、postgres(マスタサーバ)は新しいバックエンドプロセスをフォークする
  2. トランザクションが開始後の変更はWALバッファに記録され、設定に応じてWALライタによってディスク状のWALファイルに書き込みをする
  3. コミットされるとバックエンドプロセスにて変更をデータファイルに書き込む。

autovacuum

  1. PostgreSQLサーバが起動すると、postgres(マスタサーバ)は自動バキュームランチャプロセスを起動する
  2. 自動バキュームランチャはデータベース内ののテーブルの状態を監視、バキューム処理の必要性を判断する
  3. dead tuple(不要領域)の数が閾値に達すると、自動バキュームランチャはそのテーブルに対してバキューム処理をトリガーする。

まとめ

PostgreSQLの中では様々なプロセスが必要に応じて動いています。
これらを理解することで障害やパフォーマンス向上のためにPostgreSQLの中で何が起きているのかを的確に理解して活かすことができる考えています。
是非ともより一層PostgreSQLについて理解を深めていきましょう!

2
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
2
0