MVCC は複数バージョンを持つことで、writer は reader をブロックせず、reader は writer をブロックしない
- writer がロックを取っていても reader は前のバージョンを読めば良いのでブロックされない
- 逆に read していても writer は新しいバージョンを作れば良いのでブロックされない
- W-W は 2PL なり OCC なりで調停しないといけない
- (疑問)MVCC と S2PL を組み合わせると read only じゃない限り、ロック取っちゃうから嬉しくない?
version storage
- append only
- バージョン番号をつけた新しい行を追加する
- 簡単だけど copy が必要
- time travel storage
- time travel table に古い行を突っ込んで、メインテーブルには新しい行を入れる
- gc が楽
- delta storage
- 変更したカラムのデータだけ入れる
- 差分が少ない
- append only
garbage collection
- tuple level
- background vacuuming
- シーケンシャルスキャンして不要なデータを消す
- シーケンシャルスキャンでバッファプールが死ぬ
- dirty page bitmap を持てば回避できる
- cooperative cleaning
- 各スレッドがバージョンチェインを舐めるときに不要なデータを消す
- background vacuuming
- trx level (advanced)
- tuple level
index management
- バージョンを扱うと更新ごとに index の更新が必要になる
- secondary index が参照する先を pk にすると、更新が減る
- あるいは間接層をはさんで index の参照先と物理IDのマッピングを作る。