初めに
PostgreSQLのプロセスを知ることで、中で何が起きているのかを理解することができるようになります。例えばクエリ処理だけでなく、バッファの管理、ストレージへの書き込み制御、統計情報の収集などについてです。早速理解を深めていきましょう。
この記事で得られること
この記事を読み終えることで以下のメリットがあります。
- PostgreSQLのプロセス構成の理解が深まる
- PostgreSQLが好きになる。
プロセス構成
それぞれのプロセスの詳細は以下の通り
プロセス名 | 説明 |
---|---|
マスタサーバプロセス | 最初に起動される親プロセス |
ライタプロセス | 共有バッファのデータをデータファイルに書き出す |
WALライタプロセス | WALをディスクに書き出すプロセス。WALバッファに書き込まれたWALをWALファイルに書き出す |
チェックポインタプロセス | チェックポイントを設定に従い、自動的に実行するプロセス |
自動VACUUMランチャ | 設定に従って自動バキュームワーカを起動する |
自動VACUUMワーカ | 設定に従って自動バキューム処理を行うプロセス |
統計情報コレクタプロセス | データベースの活動状況に関する稼働統計情報を一定感覚で収集するプロセス |
バックエンドプロセス | クライアントから接続要求を受けたときに生成されるプロセス |
パラレルワーカプロセス | パラレルクエリが実行される際に、バックエンドプロセスから起動されるプロセス |
ロガー | PostgreSQLのログをファイルへ書き出す |
WALセンダ | レプリケーション時にWALをスレーブサーバに転送する |
WALレシーバ | レプリケーション時にWALをマスタプロセスから受信する |
バックグラウンドワーカ | ロジカルレプリケーション用のワーカ。 |
プロセスの動き方
それぞれのプロセスについて把握したところで、次にプロセスがどのような動き方をするのか理解を深めていきましょう。
PostgreSQLサーバーの起動時
- postgres(マスタサーバ)が起動、以下のサブプロセスをフォーク
a. WALライタ
b. ライタ
c. チェックポインタ
d. 統計情報コレクタ
e. 自動バキュームランチャ
クライアント接続からSQLの実行
- psqlやアプリからPostgreSQLサーバーに接続を要求すると、postgres(マスタサーバ)は新しいバックエンドプロセスをフォークする
- トランザクションが開始後の変更はWALバッファに記録され、設定に応じてWALライタによってディスク状のWALファイルに書き込みをする
- コミットされるとバックエンドプロセスにて変更をデータファイルに書き込む。
autovacuum
- PostgreSQLサーバが起動すると、postgres(マスタサーバ)は自動バキュームランチャプロセスを起動する
- 自動バキュームランチャはデータベース内ののテーブルの状態を監視、バキューム処理の必要性を判断する
- dead tuple(不要領域)の数が閾値に達すると、自動バキュームランチャはそのテーブルに対してバキューム処理をトリガーする。
まとめ
PostgreSQLの中では様々なプロセスが必要に応じて動いています。
これらを理解することで障害やパフォーマンス向上のためにPostgreSQLの中で何が起きているのかを的確に理解して活かすことができる考えています。
是非ともより一層PostgreSQLについて理解を深めていきましょう!