はじめに
今年のアドベントカレンダーでは、PostgreSQLを学んでいこうと思います。SQLはかけるがパフォーマンスチューニングと言われると途端にい、、いんでっくすを正しくはろうってことだよね。ってなってしまう僕です。
ページネーションを実施するやアンチパターンは聞きかかじったくらいで知っているんですが、体系的に学んだ事がなかったです。Indexを貼るとb-treeの検索でやるから早くなるんだよねとか、実行計画を評価しようとかはわかるんですけど、、、そもそもDBの裏側ってどんな風になっているんだっけ??ってところを深く学びたいなと思っていました。毎年、アドベントカレンダーはテーマを決めて取り組んでいるのですが、今年はPostgreSQLの裏側を学ぶことにしました!
アーキテクチャ
さぁ、学んでいきます。最初はアーキテクチャです。
ここ読んだんですが、さっぱり理解できない。。。💦💦💦💦
ChatGPTに解説を書いてもらいながら、学習していきます。
PostgreSQL のアーキテクチャ概要
PostgreSQL は単一のプロセスで動くのではなく、複数のプロセスとメモリ領域が連携して動作するプロセス・メモリ・ストレージ指向のアーキテクチャを採用しています。
内部構造を理解すると、パフォーマンスチューニングや障害復旧の仕組みがより明確に見えてきます。
🧠 全体構成
PostgreSQL のアーキテクチャは大きく以下の要素から構成されます。
- Postmaster(Server Process)
- Backend Process(Client Connection Process)
- Background Processes
- Shared Memory
- Data Files(ストレージ層)
1. Postmaster(マスターサーバプロセス)
- PostgreSQL サーバ全体の管理を行うメインプロセスです。
- 起動時にバックグラウンドプロセスを fork(派生)し、クライアントからの接続要求を待機します。
- 新しい接続要求があると、接続専用の Backend Process を生成します。
📘 公式用語:
The postmaster process is the parent of all other server processes. It handles startup, shutdown, and client connection requests.
2. Backend Process(バックエンドプロセス)
- クライアント1接続につき1プロセスが生成されます。
- SQLクエリの受信、パース、プラン生成、実行、結果返却を担当します。
- クエリ実行時には Shared Buffers(共有メモリ)を経由してデータを読み書きします。
📘 公式用語:
Each client connection is served by a separate backend process.
3. Background Processes(バックグラウンドプロセス)
PostgreSQL は複数の内部プロセスによって、データの整合性・書き込み・統計収集などを並行処理しています。
| プロセス名 | 役割 | 説明 |
|---|---|---|
| WAL Writer | Write-Ahead Logging | 変更ログをWALファイルに書き出す |
| Background Writer | Buffer Flushing | 共有バッファ内の変更済みページをディスクへ書き出す |
| Checkpointer | Checkpoint Control | チェックポイント時に全データの整合性を保証する |
| Stats Collector | Statistics Collection | テーブル・インデックスの使用統計を収集する |
| Autovacuum Launcher / Worker | Vacuum Management | 不要データ(デッドタプル)を自動削除する |
📘 公式用語:
PostgreSQL uses multiple background processes such as the WAL writer, checkpointer, and autovacuum to maintain database consistency and performance.
4. Shared Memory(共有メモリ)
PostgreSQL はメモリ上に複数のバッファ領域を持ちます。
| 領域 | 説明 |
|---|---|
| Shared Buffers | データ読み書きのキャッシュ領域。ディスクI/Oを減らす。 |
| WAL Buffers | トランザクション変更ログの一時領域。クラッシュリカバリに利用。 |
| Work Memory / Maintenance Memory | ソートやハッシュ、VACUUM処理用の作業メモリ。 |
📘 公式用語:
Shared memory areas include shared_buffers, wal_buffers, and other memory contexts used for caching and transaction processing.
5. Data Files(ストレージ層)
データは最終的に OS のファイルシステム上に保存されます。
- 各データベースは
base/ディレクトリ内に格納。 - テーブル・インデックスは 8KB 単位の「ページ(block)」として管理。
- WALファイルは
pg_wal/に保存され、障害時のリカバリに使用されます。
📘 公式用語:
All persistent data is stored in data files under the PostgreSQL data directory, managed through 8KB pages.
🧩 アーキテクチャ図(Mermaid)
最後に
今回はアーキテクチャを学ぶ、アーキテクチャを知ることができました。
とてもじゃないんですが、学ぶにはかなり重すぎて第1回で挫折してしまいそうです💦
なので、次回以降の記事で1つづつかいつまんで理解していこうと思います!!
