コンテンツへスキップ
uencoder

Phantom Read

ファントムリード(phantom read)とは、同一トランザクションで同じ範囲クエリを2回実行して異なる行数を得る現象(別トランザクションが一致する行を挿入/削除してコミット)であり、repeatable readでも残存する異常である。

目的

並行する範囲クエリにおけるファントム行とその防御(ネクストキーロックやSSI)を理解する。

メカニズム

トランザクションAがSELECT WHERE age>20を2回実行する間に、トランザクションBがage=25を挿入してコミットすると、Aの2回目のクエリは1行多く返す(ファントム)。防御:述語ロック、ネクストキーロック(MySQL)、SSI(PostgreSQL)。

ユースケース

  • 並行性異常(アノマリー)の解析
  • 範囲クエリの分離
  • ロッキング戦略の設計

関連ツール

References