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 でデータを保持するため
内部の動きを予想する
- ロックをかける
- index の種類(Hash, B+-Tree など)に応じてデータとセットに index を再構築する。
- key に対して rid もしくは rid-list の該当するデータを fetch して index の結びつける
- B+-Tree であれば leaf pages の再構築がメインかな。
- ロック解除
効果を調べる
まずは 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
続きは明日。