1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQLの裏側を学びたい(1. アーキテクチャを知る)

1
Posted at

はじめに

今年のアドベントカレンダーでは、PostgreSQLを学んでいこうと思います。SQLはかけるがパフォーマンスチューニングと言われると途端にい、、いんでっくすを正しくはろうってことだよね。ってなってしまう僕です。
 ページネーションを実施するやアンチパターンは聞きかかじったくらいで知っているんですが、体系的に学んだ事がなかったです。Indexを貼るとb-treeの検索でやるから早くなるんだよねとか、実行計画を評価しようとかはわかるんですけど、、、そもそもDBの裏側ってどんな風になっているんだっけ??ってところを深く学びたいなと思っていました。毎年、アドベントカレンダーはテーマを決めて取り組んでいるのですが、今年はPostgreSQLの裏側を学ぶことにしました!

下記書籍を元に学んでいきます!
image.png

アーキテクチャ

さぁ、学んでいきます。最初はアーキテクチャです。
ここ読んだんですが、さっぱり理解できない。。。💦💦💦💦
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つづつかいつまんで理解していこうと思います!!

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?