Phantom Read
ファントムリード(phantom read)とは、同一トランザクションで同じ範囲クエリを2回実行して異なる行数を得る現象(別トランザクションが一致する行を挿入/削除してコミット)であり、repeatable readでも残存する異常である。
目的
並行する範囲クエリにおけるファントム行とその防御(ネクストキーロックやSSI)を理解する。
メカニズム
トランザクションAがSELECT WHERE age>20を2回実行する間に、トランザクションBがage=25を挿入してコミットすると、Aの2回目のクエリは1行多く返す(ファントム)。防御:述語ロック、ネクストキーロック(MySQL)、SSI(PostgreSQL)。
ユースケース
- 並行性異常(アノマリー)の解析
- 範囲クエリの分離
- ロッキング戦略の設計