ダーティリード 【dirty read】 未コミット読み取り / 非コミット読み取り
概要
ダーティリード(dirty read)とは、データベースシステムのトランザクション処理において、あるトランザクションが処理の最中にストレージに書き込んだ未確定なデータを、他のトランザクションが読み込んで使用してしまうこと。一つのデータベースで複数のトランザクションを並列に実行する際に起きる問題で、処理途上で書き込んだデータはトランザクションが完了(コミット)したり取り消され(ロールバック)たりすると別のデータに書き換わることがあるため、別のトランザクションに誤ったデータを提供してしまうことになる。
ダーティリードを防止するにはトランザクション分離レベル “READ COMMITTED” が必要で、トランザクションの処理中によって変更されたデータはそのトランザクションが終了するまで他のトランザクションから読み取れないようロックするなどの対策が要求される。
同じ並列トランザクションに起因する問題として、あるトランザクションが同じレコードを何度も繰り返し読み出す場合に途中で他のトランザクションが内容を更新してしまう「ノンリピータブルリード」(non-repeatable read)あるいは「ファジーリード」(fuzzy read)、同じく繰り返し読み出す際に途中で他のトランザクションによって対象レコードが増えてしまう「ファントムリード」(phantom read)がある。
(2020.7.2更新)