catch-img

PostgreSQL Architecture - 2. Physical Structure

https://blog.ex-em.com/1654​​​​​​​

Physical Structure

本稿では、Dataファイル、Engine Logファイル、Configurationファイルなど、PostgreSQLが管理する様々なファイルとディレクトリに関する内容を扱うことにします。 これらのファイルおよびディレクトリは、PGDATAというDatabase Clusterのデータディレクトリに格納されています。 PGDATAの一般的な位置は/var/lib/pgsql/13/dataですが、これは PostgreSQL のインストール方法や設定によって変更可能です。

📌 Database 及び Cluster などに関する内容は Logical Structure 内容をご参照ください。

Data Directory 構造(PGDATA)

一般的に、Database Clusterの構成要素は、データディレクトリの配下に配置されています。 Database Cluster初期化(initDB)時、指定された場所にデータディレクトリが作成され、そのディレクトリの下に様々なディレクトリ及びファイルが作成されます。

本稿では便宜上、dataディレクトリを①Data領域、②Log領域、③Configuration領域、④その他の領域に分類します。このうち①~③について詳しく見ていくことにします。

Data領域

Data領域は、実際にユーザデータが保存される空間であり、①Database Cluster関連のDataが保存されるglobalディレクトリ②ユーザデータ(テーブル、インデックスなど)が保存されるbaseディレクトリ③Tablespace情報が保存されるpg_tblspcディレクトリに区分することができます。

Global Directory

globalディレクトリとは、PostgreSQLの初期インストール時(InitDB)に生成されるDefault Global Tablespaceディレクトリであり、pg_global Tablespaceとも呼ばれます。 この領域には、PostgreSQL Clusterの下位のDatabaseが共有する情報が保存されています。 globalディレクトリには以下のような4種類のファイルがあります。

■ pg_internalinit、 pg_filenode.map

• Database内に存在するObjectの属性情報及び実際の該当Objectの情報、DataファイルとのMapping情報が含まれます。

■ pg_control

• PostgreSQLの運用に必要なメタ情報を格納しているファイルで、OracleのControlファイルに相当します。 pg_controldataユーティリティを通じてファイルの内容を確認することができます。

■ その他の数字ファイル

• Tablespace、Database、Roleのように、複数のDatabaseが共通して使用するDataを持つファイルです。 以下の表は、代表的なOID(Object ID)とテーブル名をMappingした内容です。

Filename/OID
テーブル名 (Table Name)
説明 (Description)
1213
pg_tablespace
使用可能なTablespace情報
1260
pg_authid
データベース認証識別子(ユーザー、グループ、ロール)情報
1261
pg_auth_members
ロール間のメンバー関係情報
1262
pg_database
使用可能なデータベース情報
6000
pg_replication_origin
すべてのレプリケーションの元情報

baseディレクトリもPostgreSQLの初期インストール時(initDB)に生成されるDefault Tablespaceディレクトリの一つで、pg_default Tablespaceとも呼ばれます。 ここにはDatabase内にあるテーブル、インデックス、関数のようなObjectが実際に保存される領域であり、保存パスは以下のような構成になっています:

$PGDATA/base/{database_OID}/{object_ID}

つまり、baseディレクトリの下位にはDatabase OIDを名前で持つディレクトリが存在し、それぞれのDatabaseディレクトリに実際のObject関連ファイルが位置します。

📌 oid2name Utilityは、pg_class テーブルとpg_relation_filepath関数を通じて、データベース名、テーブル名の確認することができます。

pg_tblspc Directory
PostgreSQLのTablespace情報を保存する領域です。 データディレクトリではなく、他の特定のディレクトリを指定してTablespaceを生成すると、そのディレクトリのパスがpg_tblspcディレクトリに生成されたシンボリックリンクを介して接続されます。

# テーブルスペース作成
postgres=# CREATE TABLESPACE tbs01 LOCATION '/pg_tbs';

$ pwd
/var/lib/postgresql/13/main/pg_tblspc

$ ls -l
lrwxrwxrwx 1 postgres postgres 7 Nov 22 15:55 16404 -> /pg_tbs

$ cd /var/lib/postgresql/13/main/pg_tblspc/16404/PG_13_202007201

$ ls -l
drwx------ 2 postgres postgres 4096 Nov 23 10:45 16405
drwx------ 2 postgres postgres 4096 Nov 23 10:45 16406


ログ領域

pg_wal Directory

  • OracleのRedo Logのような役割を果たすWALファイルを保存する領域です。
  • 一般的に、Database異常終了時に復旧用途として使用されます。またReplication機能を使用する時にも使用されます。
  •  PostgreSQL 9.6バージョンまではディレクトリ名がpg_xlogでしたが、PostgreSQL 10バージョンからpg_walに変更されました。
    📌postgresql.confの"WRITE-AHEAD LOG"部分パラメータを修正して使用します。

Log Directory

  • Oracleのアラートログと類似しており、Databaseの運用中に発生する特異事項を記録するスペースです。
  • PostgreSQL 9.6バージョンまではディレクトリ名がpg_logでした、PostgreSQL 10バージョンからlogに変更されました。
📌postgresql.confの"REPORTING AND LOGGING"部分パラメータを修正して使用します。

Configuration 領域

PG_VERSION

PostgreSQL Databaseのバージョン情報(Major Number)を表示します。 ファイルの中に記述された内容とPostgreSQLエンジンバージョンが一致しない場合、PostgreSQLは起動できません。 以下の2つのケースでは、PostgreSQLが起動されません。

• PG_VERSION ファイルが存在しない場合
• PostgreSQL Databaseのバージョンとファイルに記述されたバージョンが異なる場合

pg_hba.conf

PostgreSQLの認証システム関連情報が含まれているファイルです。 PostgreSQLにアクセスするHostやHostのData伝送方式、暗号化伝送方式に対する設定ができます。 pg_hba.conf 内容を変更した後は、PostgreSQLを再起動する必要があります。

📌pg_hbaのHBAはHost-Based Authenticationの略でホスト基盤認証を指します。 より詳しい説明はpg_hba.conf ページを参考にしてください。

postgresql.conf

  • PostgreSQL Databaseの環境設定ファイルです。 Oracleのpfileに相当します。
  • PostgreSQL 12バージョンからrecovery.confファイルが該当ファイルに統合されました。 (既存のバージョンでは必要に応じてrecovery.conf構成が必要)
📌パラメータ別の詳細については、postgresql.confページを参照してください。

postgresql.auto.conf

  • postgresql.auto.confはユーザーが直接修正するものではなく、alter systemコマンドを通じて変更した内容が保存されるファイルです。
  • 変更された情報は、pg_reload_conf()関数またはpg_ctl reloadコマンドにより適用できます。 ただし、パラメータによってはDBの再起動を必要とする場合があります。
  • alter system resetまたはalter system reset allコマンドを使用すると、変更された内容を初期化することができ、既存の設定内容は削除されます。

postmaster.pid

• postmasterプロセスのPID、Data Path、開始時間、およびPort情報を格納します。このファイルはPostgreSQL起動中にのみ存在します。

CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧