今回はPostgreSQLのプロセス構成について記載します。Azure DB for PostgreSQLも基本的にはPostgreSQLなので各プロセスに関してある程度理解しておいた方が何かと役に立ちます。
PostgreSQLのプロセス構成
今回のテーマはOracle DatabaseからAzure Database for PostgreSQLへの移行です。なので、Oracle Databaseと比較しますが、Oracle Databaseはデータベースを稼働させるために様々なプロセスが起動しています(ログライタ、DBライタ、SMON、PMON、etc...)。これはPostgreSQLでも同じで様々なプロセスが起動します。
ただし、PostgreSQLの場合はマスターサーバプロセスというものが存在しており、各プロセスはこのマスターサーバプロセスからフォークする、いわゆるコピーする形で様々なプロセスが起動します。代表的なプロセスを以下に図示します。これらプロセスによって、データベースへの読み込みや書き込み、統計情報の取得、あるいはバキューム処理なんかを制御しております。
各プロセスを確認してみる
先ほど紹介した各プロセスはlinux環境であればpsコマンドなんかで確認することができます。各プロセスはpostgres:
から始まります。
$ ps -elf | grep postgres
結果
①マスタサーバプロセス
②ログ出力プロセス
③チェックポインタ
④ライタ
⑤WALライタ
⑥自動バキュームランチャ
⑦統計情報自動コレクタ
各プロセスの役割
各プロセスの役割ですが以下の表に大まかに記載します。
これらすべてのプロセスはマスタサーバプロセスが最初に起動し、フォークする形で様々なプロセスを起動する形となります。
プロセス名 | 説明 | PSコマンドの表示 |
---|---|---|
マスタサーバ | 最初に起動される親プロセス | 起動コマンドそのものが表示 |
ライタ | 共有バッファの内容をデータファイルに書き出す | writer process |
WALライタ | WALバッファの内容をWALファイルに書き出す | wal writer process |
チェックポインタ | 全てのダーティーページをデータファイルに書き出す | checkpointer process |
自動バキュームランチャ | 設定に従って自動バキュームランチャを起動 | autovacuum launcher process |
自動バキュームワーカ | 設定に従って自動バキューム処理を実施 | autovacuum worker process |
統計情報コレクタ | データベースの活動状況に関する統計情報を収集する | Stats collector process |
バックエンド | クライアントから接続要求に関する統計情報収集する | (ユーザ名 データベース名 [接続] 状態)という書式で表示 |
バックグランドワーカ | ロジカルレプリケーション用のワーカ | bgworker: [モジュール名]という書式で表示 |
パラレルワーカ | パラレルスキャン実行時に起動され、クエリを処理する。 | Bgworker: parallel worker for PID という書式で表示 |
最後に
様々なプロセスが起動しPostgreSQLの制御を行っている事をわかっていただければ幸いです。各プロセスの動きをある程度理解することは、PostgreSQLを利用するうえで意外と役に立つので是非。
次回は
次回はPostgreSQLのメモリ構成について記載したいと思います。