PostgreSQLのアーキテクチャの基本


PostgreSQLのアーキテクチャの基本について紹介します。

👽 PosterSQLの各プロセスの概要

プロセス名 説明
マスタサーバ 最初に起動される親プロセス。接続に対応するプロセスをforkで起動します
ライタ 共有バッファの内容をデータファイルに書き出します
WALライタ WAL(Write Ahead Logging)バッファの内容をWALファイルに書き出します
チェックポンタ すべてのダーティページをデータファイルに書き出します
自動バキュームランチャ 設定にしたがって自動バキュームワーカを起動します
自動バキュームワーカ 設定にしたがって自動バキューム、アナライズを行います
統計情報コレクタ データベースの活動情報に関する統計情報を収集します
バックエンドプロセス クライアントからのリクエストにより起動し、クエリを実行します

上の説明内の用語の補足説明です。

  • バキューム:更新や削除で発生した不要な領域を再利用できるようにする処理
  • アナライズ:クエリの効率的な実行のために、各列のデータ分布などの統計情報を収集
  • ダーティページ:ファイルシステムに書き戻す必要なるデータを持ったページ

PostgreSQLはクエリ処理、バッファ管理、ストレージへの書き込み制御、統計情報の収集などを複数のプロセスで実行しています。

-+= 50525 root /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres # マスタサーバ
|--= 50536 root postgres: checkpointer process # チェックポインタ
|--= 50537 root postgres: writer process # ライタ
|--= 50538 root postgres: wal writer process # WAL ライタ
|--= 50539 root postgres: autovacuum launcher process # 自動バキュームランチャ
\--= 50540 root postgres: stats collector proces # 統計情報のコレクタ

🐯 メモリ管理

PostgreSQLでは次の2つのメモリ領域があります。

  • 共有メモリ域:PostgreSQLのサーバプロセス全体で共有します
  • プロセスメモリ域:バックエンドプロセスで確保されます

🎉 フォルダ・ファイル構成

PostgreSQLのファイルは、initdbコマンドでデータベースクラスタと呼ばれるディレクトリを作成します。
データベースクラスタの主要フォルダは次のとおりです。

ディレクトリ名 説明
base データベースごとに識別子(oid: ObjectId)のディレクトリが配下に作成されます
global データベースクラスタで共有するディレクトリで、pg_databaseなどが格納されます
pg_xlog WALファイルを格納するディレクトリです
pg_clog トランザクションのコミットを管理するファイルが格納されます
pg_tblspc テーブル空間として作成されたディレクトリへのシンボリックリンクを格納します

データベースクラスタを構成する主なファイルを紹介します。

ファイル名 説明
テーブルファイル テーブルデータの実態が格納され、複数の8,192バイトの「ページ」で構成されます
インデックスファイル インデックス情報を格納します。8,192バイトの「ページ」で構成されます
TOASTファイル 2KBを超える大きなテーブル業を格納するファイルです
Free Space Mapファイル 空き容量を追跡するための情報が格納されたファイルです
WALファイル 更新操作を記録するファイルでpg_xlogフォルダ配下に格納されます

🐮 設定ファイルの種類

PostgreSQLには次のような設定ファイルがあります。

ファイル名 説明
postgresql.conf PostgreSQL全体の動作を制御します
pg_hba.conf クライアントからの接続を制御します
pg_ident.conf ident認証およびGSSAPI認証で使用されます
recovery.conf アーカイブリカバリ用の設定ファイルです
pg_service.conf libpqライブラリの接続情報を管理します

設定項目と設定値はSHOWコマンドか、pg_settingsシステムビューで参照できます。

-- すべての設定値を確認
SHOW ALL;

-- pg_settingsから設定値を取得
SELECT name, setting, unit FROM pg_settings WHERE name LIKE '%wal%';

🚕 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍