PostgreSQLのアーキテクチャの基本について紹介します。
👽 PosterSQLの各プロセスの概要
プロセス名 | 説明 |
---|---|
マスタサーバ | 最初に起動される親プロセス。接続に対応するプロセスをforkで起動します |
ライタ | 共有バッファの内容をデータファイルに書き出します |
WALライタ | WAL(Write Ahead Logging)バッファの内容をWALファイルに書き出します |
チェックポンタ | すべてのダーティページをデータファイルに書き出します |
自動バキュームランチャ | 設定にしたがって自動バキュームワーカを起動します |
自動バキュームワーカ | 設定にしたがって自動バキューム、アナライズを行います |
統計情報コレクタ | データベースの活動情報に関する統計情報を収集します |
バックエンドプロセス | クライアントからのリクエストにより起動し、クエリを実行します |
上の説明内の用語の補足説明です。
- バキューム:更新や削除で発生した不要な領域を再利用できるようにする処理
- アナライズ:クエリの効率的な実行のために、各列のデータ分布などの統計情報を収集
- ダーティページ:ファイルシステムに書き戻す必要なるデータを持ったページ
PostgreSQLはクエリ処理、バッファ管理、ストレージへの書き込み制御、統計情報の収集などを複数のプロセスで実行しています。
-+= 50525 root /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres # マスタサーバ |
🐯 メモリ管理
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
システムビューで参照できます。
-- すべての設定値を確認 |
🚕 参考リンク
- 内部構造から学ぶPostgreSQL (図の出典)