Slide 5
Slide 5 text
データベースにおける排他制御の復習
● Strict 2-Phase Locking (S2PL) から始まった
○ ロックを徐々に獲得していき,トランザクションのコミットで一気に開放する
● トランザクション分離レベルの変遷と Multi-Version Concurrency Control (MVCC) の登場
○ READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE
○ これらだけで説明しきれないアノマリーと新しい分離レベルのもろもろが登場
○ MVCC では読み取り専用のスナップショットとデータ本体を分離し,性能と部分的一貫性を両立
● MySQL/Postgres での REPEATABLE READ 以上の実装
○ MySQL は一貫して「予めロックしておく」悲観的制御だけでなんとかする
○ Postgres は「競合したら失敗させる」楽観的制御が入ってくる
一方で,両者とも (REPEATABLE READ 以上にせずとも)
SELECT … FOR UPDATE の Locking Read で悲観的ロック対象行を明示的にコントロール
することができる