PostgreSQLのtable file構成

table file構成

  • データの実体が格納されているファイル
  • 8192byteのpageと呼ばれる固定長領域が連続して配置されている
  • 1GBまで拡張可能
    • 1GB以上は同ファイル名(+インクリメントされた数値)でセグメント管理
  • 1テーブル、インデックスのサイズは32TBが上限

page

pageは以下の構成で成り立っている。

  • page header data
    • WALやページ内管理情報 (計24byte)
    • pd_lsn(8byte, Log Sequence Number)
      • 最終更新ログ位置
    • pd_prune_xid(4byte)
      • ページ内の一番古いtransaction id
    • pd_checksum(2byte)
      • I/Oシステムによる破損検知の補助情報
    • pd_flags(2byte)
    • pd_lower(2byte)
      • 空き領域開始位置ページ頭からのoffset
    • pd_upper(2byte)
      • 空き領域終了位置ページ頭からのoffset
    • pd_special(2byte)
      • 特殊空間のページ頭からのoffset
    • pd_pagesize_version(2byte)
  • item id data(32byte)
    • lp_off(2byte)
      • tupple の開始offset
    • lp_len(15byte)
      • tupple length
    • lp_flags(2byte)
      • status flag
        • 0 未使用
        • 1 使用中
        • 2 hot updateによりredirect
        • 3 無効
  • item (可変)
    • 行データ(tuple実体)が格納される
    • page末尾(空き領域)から格納される
  • 空き領域 (可変)
    • FILLFACTOR設定値を超える場合、新規page作成
  • 特殊空間 (可変)
    • page内容がindexの場合生成される空間
    • indexの左右のpage linkが格納されたりする
    • table fileの場合生成されない