PostgreSQLのアーキテクチャー概要
PostgreSQLには、用途や環境に応じて様々な構成を組み、最適なパフォーマンスで動作させられるよう、設定ファイルpostgresql.confに多くのパラメーターが存在します。そのパラメーターを正しく設定し調整を行うためには、PostgreSQLのアーキテクチャーを理解する必要があります。ここでは、押さえておきたい、PostgreSQLの基本的なアーキテクチャーについて説明します。なお、この記事で対象にしているPostgreSQLのバージョンは9.5以降です。
1. PostgreSQLの基本構成
PostgreSQLの基本的な構成について説明します。はじめに、主なプロセス、メモリー、および、ファイルについての構成図を示します。

PostgreSQLを構成する主なプロセス、メモリー、ファイルについて、その用語と概要を説明します。
リスナープロセス
クライアントからリスナープロセスへ接続要求が行われると、リスナープロセスがサーバープロセスを生成し、クライアントとのセッションを確立します。PostgreSQLではマスターサーバープロセスとも呼ばれます。
サーバープロセス
サーバープロセスは、クライアントとのセッションごとに作成されます。PostgreSQLではバックエンドプロセスとも呼ばれます。サーバープロセスは、発行されたSQLの解析と実行を行います。その際の処理用のワークバッファーとして、サーバープロセスごとに確保されたプロセスメモリーを使います。プロセスメモリーは、セッション単位に確保されるため、接続数分のメモリーを消費します。なお、テーブルやインデックスのデータ更新は、データファイルから読み込まれてキャッシュされた共有メモリー上で行います。
共有メモリー
共有メモリーには、「共有バッファー」、「WALバッファー」などの領域があります。共有バッファーには、「空き領域マップ」と「可視性マップ」も含まれます。それぞれの概要を以下に示します。
共有バッファー(shared_buffers)
ディスク上にあるテーブルやインデックスのデータを、ブロック単位で共有メモリー上にキャッシュするための領域です。データファイルは、複数の8,192バイトのブロックで構成されおり、この単位でキャッシュします(OSのシステムキャッシュを経由します)。PostgreSQLのサーバープロセスは、共有バッファー上のテーブルやインデックスのデータにアクセスすることで、ディスクI/Oを削減しパフォーマンスを向上させます。共有バッファーに読み込まれたブロックは、「ページ」と呼びます。なお、各種技術文書では、「ページ」のことを「ブロック」や「バッファー」と表現されることもあります。

WALバッファー(wal_buffers)
PostgreSQLに更新要求があると、トランザクションの更新ログである先行書き込みログ(WAL:Write Ahead Logging)をWALバッファーに書き込みます。その後、トランザクションがコミットされたとき、あるいは、書き込むべきWALの量がWALバッファーのサイズを超えたときに、WALバッファー内のレコードをトランザクションログ(WAL)ファイルに書き出します。
空き領域マップ
テーブルデータのブロック単位に、レコード(タプル、行とも言います)の空き領域情報を管理します。INSERTやUPDATE時に、空き領域マップが参照され、利用可能な領域を見つけて新しいレコードを挿入します。共有メモリー上の空き領域マップは、VACUUMごとに更新してファイルに書き出し、PostgreSQLの再起動時に読み込まれます。テーブルの1ブロック(ページ)ごとに1バイトの領域を使用します。データファイル上は、“テーブルのファイル名_fsm”というファイル名でテーブルファイルと同じディレクトリー内に格納されます。
Loading component...
注1:SQLを実行する際に内部で実行される、テーブルデータの検索方式の1つです。
ワーカープロセス
Loading component...
バックグラウンドライター
共有バッファー内の空き領域を空けるため、共有バッファー内で更新されたダーティページ(注2)を、少しずつデータファイルに書き出します。
WALライター
WALバッファー(wal_buffers)内のWALレコードをWALファイルに書き出します。
Loading component...
Loading component...
統計情報コレクター
データベースの活動状況に関する情報を統計情報として定期的に収集します。収集した結果は、システムビュー(pg_stat_***)を参照することで確認できます。
Loading component...
ロガー
PostgreSQLのサーバーログを、サーバーログファイルへ書き出します。
注2:共有バッファー内でデータの更新が行われ、ファイルへの書き出しが必要になったページです。
データファイル(テーブル、インデックス)
Loading component...
Loading component...
Loading component...
Loading component...
Loading component...
トランザクションログ(WAL)ファイル
Loading component...
アーカイブログファイル
WALファイルを別の領域へアーカイブしておくためのファイルです。
サーバーログファイル
PostgreSQLのサーバーログを書き出すためのファイルです。
2. PostgreSQLの主なアーキテクチャー
PostgreSQLの基本的なアーキテクチャーについて説明します。
Loading component...
Loading component...
Loading component...
Loading component...
Loading component...
Loading component...
Loading component...
Loading component...
3. 参考情報
PostgreSQLのアーキテクチャーと、設定ファイルpostgresql.confの重要なパラメーターとの関係や注意点を示します。なお、図9の赤字のキーワードは、postgresql.confの実際のパラメーター名です。
Loading component...
以上、PostgreSQLの主なアーキテクチャーについて説明しました。機能、および、設定ファイルのパラメーターの詳細については、PostgreSQLのマニュアルを参照してください。
2021年3月12日公開
こちらもおすすめ
Loading component...
富士通のソフトウェア公式チャンネル(YouTube)
富士通のミドルウェア製品のご紹介や各種イベント・セミナーの講演内容、デモンストレーションなどの動画をご覧いただけます。








