勉強日記

チラ裏

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

LPI-Japan OSS-DB Gold 認定教材 PostgreSQL 高度技術者育成テキスト

LPI-Japan OSS-DB Gold 認定教材 PostgreSQL 高度技術者育成テキスト

  • 作者:河原 翔
  • 発売日: 2014/10/27
  • メディア: オンデマンド (ペーパーバック)


運用管理

容量見積もり

テーブル

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とかでいつも書き換えてるアレ

障害対応

zero_damaged_pages

  • ページヘッダが壊れたらこれしかない
    • ページのデータは0埋めされて失われる

共有システムカタログ

  • データベースクラスタ全体で共有するシステムカタログ
  • global/配下
    • cf. ふつうのシステムカタログはbase/配下