PostgreSQL 内部構造ガイド - 初心者向け
このドキュメントでは、PostgreSQLがどのように動作しているかを初心者向けに解説します。データベースの「中身」を理解することで、より効率的なアプリケーション開発やトラブルシューティングができるようになります。
目次
1. アーキテクチャ全般
1.1 PostgreSQLの全体像
PostgreSQLは「クライアント/サーバーモデル」で動作します。簡単に言えば、データベースサーバーが常に起動していて、アプリケーション(クライアント)からの接続を待ち受けています。
┌─────────────────────────────────────────────────────────────┐
│ PostgreSQL Server │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Backend 1 │ │ Backend 2 │ │ Backend 3 │ ... │
│ │ (接続1用) │ │ (接続2用) │ │ (接続3用) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ▲ ▲ ▲ │
│ │ │ │ │
│ ┌──────┴───────────────┴───────────────┴──────┐ │
│ │ Postmaster (親プロセス) │ │
│ └─────────────────────────────────────────────┘ │
│ ▲ │
└─────────│────────────────────────────────────────────────────┘
│ TCP/IP または Unix Socket
┌─────┴─────┐
│ Client │ (アプリケーション)
└───────────┘
1.2 プロセス構造
PostgreSQLは「マルチプロセスアーキテクチャ」を採用しています。これは各接続に対して独立したプロセスを作成する方式です。
主要なプロセ ス
| プロセス名 | 役割 |
|---|---|
| Postmaster | 親プロセス。クライアント接続を受け付け、Backendプロセスを生成する |
| Backend | 各クライアント接続に対応。SQLの解析・実行を担当 |
| Background Writer | 共有バッファからディスクへデータを書き出す |
| WAL Writer | WAL(トランザクションログ)をディスクに書き出す |
| Checkpointer | 定期的にチェックポイントを実行し、データの永続化を保証 |
| Autovacuum Launcher | 自動バキュームプロセスを管理 |
| Stats Collector | データベースの統計情報を収集 |
┌────────────────────────────────────────────────────────────────┐
│ PostgreSQL プロセス群 │
├────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ │
│ │ Postmaster │ ← 全てのプロセスの親 │
│ └──────┬───────┘ │
│ │ │
│ ┌──────┴──────────────────────────────────────┐ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐│
│ │ユーザー接続用 │ │ユーザー接続用 │ ... │ バックグ ラウンド ││
│ │ Backend 1 │ │ Backend 2 │ │ プロセス群 ││
│ └──────────────┘ └──────────────┘ └──────────────────┘│
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────┐ ┌───────────┐ ┌───────┐ │
│ │BG Writer│ │WAL Writer │ │ その他 │ │
│ └─────────┘ └───────────┘ └───────┘ │
└────────────────────────────────────────────────────────────────┘