PostgreSQL 高度技術者育成テキスト 章末問題メモ

OSS-DBPostgreSQL勉強メモ

[asin:B00P4WD4QG:detail]


運用管理

容量見積もり

テーブル

1ページあたりの格納行数

(8192 * fillfactor - 24) / (4 + 23 + 1行あたりの容量)
  • 24

    • ページヘッダ
  • 4

    • ラインポインタ
  • 23

    • テーブルのタプルヘッダ
    • 実際にはアラインメントを考慮して24で計算したほうが正確説ある

インデックス

1ページあたりの格納行数

(8192 * fillfactor - 24 - 16) / (4 + 8 + 1行あたりの容量)
  • テーブルとの違い
  • fillfactor

    • internal node, root nodeではfillfactorが70%固定であることに留意する
  • 16

    • special space

      • Btreeインデックスでは、ページ自体が木構造
      • 左右の兄弟の木を指していたりする
  • 8

    • インデックスのタプルヘッダ
  • インデックスを作成してからINSERTするのと、INSERTしてからインデックスを作成するのとでは容量が全然違う

    • 前者ではinternal nodeのfillfactor 70%が効く
    • 後者ではインデックス作成後にINSERTしないので、ガッツリ詰まる

      • 前者のパターンでREINDEXした場合も同様

トランザクションID周回問題

  • autovacuumオフでも、トランザクションIDが周回しそうになると下記のようなログで怒られる
WARNING:  database "mydb" must be vacuumed within 177009986 transactions
HINT:  To avoid a database shutdown, execute a database-wide VACUUM in "mydb".

GUC: Grand Unified Configuration パラメータ

  • postgresql.confとかSETとかALTER SYSTEM SETとかでいつも書き換えてるアレ

障害対応

zerodamagedpages

  • ページヘッダが壊れたらこれしかない

    • ページのデータは0埋めされて失われる

共有システムカタログ

  • データベースクラスタ全体で共有するシステムカタログ
  • global/配下

    • cf. ふつうのシステムカタログはbase/配下