ファントムリード 【phantom read】 幻像読み取り / 仮読み取り
概要
ファントムリード(phantom read)とは、データベースシステムのトランザクション処理において、あるトランザクションが読み出しを複数回行うと、その間に他のトランザクションが追加したデータが増えてしまうこと。一つのデータベースで複数のトランザクションを並列に実行する際に起きる問題で、あるトランザクションが同じテーブルから何度も読み込みを実施するような場合に、並行して実行されている別のトランザクションによるレコードの追加が反映され、同一トランザクション中なのに対象レコードや件数が増加してしまう。
ファントムリードを防止するには、トランザクション分離レベルとして最も高い “SERIALIZABLE”(直列化可能)を指定する必要があるが、その分だけ性能は低くなるため、処理の特性やコストなどとの兼ね合いで完全に防ぐ必要があるか判断することになる。
同じ並列トランザクションに起因する問題として、あるトランザクションが同じレコードを何度も繰り返し読み出す場合に途中で他のトランザクションが内容を更新してしまう「ノンリピータブルリード」(non-repeatable read)あるいは「ファジーリード」(fuzzy read)、あるトランザクションが処理の最中にストレージに書き込んだ未確定なデータを、他のトランザクションが読み込んで使用してしまう「ダーティリード」(dirty read)がある。
(2020.11.2更新)