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