ダーティーリードとは?
だーてぃーりーど
ダーティーリードとは、データベースでまだコミットされていない(確定していない)データを別のトランザクションが読み取ってしまう現象のことです。
ダーティーリード(Dirty Read)とは、データベースの同時実行制御に関する異常現象の一つで、あるトランザクションがまだコミット(確定)されていない変更データを、別のトランザクションが読み取ってしまう状態を指します。
具体的なシナリオで説明すると、トランザクションAが在庫数を「10」から「0」に更新している途中、コミット前の段階でトランザクションBが在庫数を読み取り「0」を取得したとします。その後Aがロールバック(取り消し)すると、在庫数は「10」に戻りますが、Bはすでに「0」というデータをもとに処理を進めてしまいます。これがダーティーリードです。
SQL標準では、トランザクション分離レベルによってこの問題への対処が異なります。
- READ UNCOMMITTED:ダーティーリードが発生する(最も緩い分離レベル)
- READ COMMITTED:コミット済みデータのみ読み取るため、ダーティーリードを防止
- REPEATABLE READ:さらにファジーリード(反復不能読み取り)も防止
- SERIALIZABLE:最も厳格で、ファントムリードも防止
多くの本番データベースシステムではデフォルト分離レベルがREAD COMMITTEDまたはREPEATABLE READ以上に設定されており、通常のアプリケーションでダーティーリードが問題になるケースは少ないです。しかし分離レベルをREAD UNCOMMITTEDに下げてパフォーマンスを優先する設計では、意図せずダーティーリードが発生するリスクがあります。
使い方・例文
在庫管理システムで分離レベルを最低に設定すると、他のユーザーが入力途中の未確定な在庫数を読み込んでしまい、誤った在庫情報をもとに発注処理が走る可能性があります。
この用語をシェア
最終更新: