5.次の課題は CLUSTER コマンド - PostgreSQL のソースコードを読む

CLUSTER コマンドの内部で何が起きているかソースを読んでみようと思う。
その準備段階として

  • CLUSTER コマンドの詳細をマニュアルで読む
  • 内部の動きを予想する
  • 効果を調べる

をやる。

マニュアル

PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: CLUSTER

  • いわゆる clustered index を構築するコマンド
  • one time operation
    • 既に存在する table と index に対して行うもの
    • その後 table に insert されたデータは clustered にならない(なんじゃそりゃ)
  • 何回も cluster コマンドを発行して recreate したいならば
    • FILLFACTOR を 100% 以下にしなさい。
    • (予想) コマンド発行中の update が既に存在する page に行われるから安全。
  • Cluster 化中は ACCESS EXCLUSIVE ロックがかかる。DB は read/write できなくなる。
  • Cluster 中はテンポラリテーブルが作られる
    • index order でデータを保持するため

内部の動きを予想する

  1. ロックをかける
  2. index の種類(Hash, B+-Tree など)に応じてデータとセットに index を再構築する。
    1. key に対して rid もしくは rid-list の該当するデータを fetch して index の結びつける
    2. B+-Tree であれば leaf pages の再構築がメインかな。
  3. ロック解除

効果を調べる

まずは PostgreSQL のインストールから。

% sudo apt-get install postgresql
% sudo -u postgres createuser -P taro
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) y
sudo -u postgres createdb test
psql -n test

続きは明日。