メインコンテンツへ
データベースDB実践

トランザクション分離レベルに関して、READ COMMITTEDとSERIALIZABLEの違いを正しく説明しているものはどれか。

ア.READ UNCOMMITTEDは他トランザクションのコミット前データも読めるため、最も整合性が高い分離レベルである。
イ.READ COMMITTEDはすべてのトランザクション異常を防ぐ最も安全なレベルであり、SERIALIZABLEは古い互換性のために残された低いレベルである。
ウ.SERIALIZABLEはトランザクションをランダムな順序で実行するため、一貫性より可用性を優先したシステムに向いている。
エ.READ COMMITTEDはコミット済みデータのみ読み取るためダーティリードは防げるが、ファントムリードや反復不能読み取りが発生する可能性がある。SERIALIZABLEはすべての異常を防ぐ最高レベルだが、並行性能が下がる。正解

解説

分離レベルは「他人の作業をどこまで見えてしまうか」の設定。READ UNCOMMITTED(何でも見える)→READ COMMITTED→REPEATABLE READ→SERIALIZABLE(完全に壁で仕切られた個室)の順で安全になるが、並行処理の効率は下がる。

なぜ エ が正解か

エが正解。READ COMMITTEDはコミット済みデータのみ読むためダーティリード(未コミットデータ読み取り)を防ぐ。しかし同一トランザクション内で同じSELECTを2回実行すると結果が変わる(反復不能読み取り)や、他トランザクションのINSERTで行数が変わる(ファントムリード)は防げない。SERIALIZABLEはロックで直列化を保証し全異常を防ぐが、デッドロックリスクと性能低下がある。

なぜ イ は間違いか

逆。READ COMMITTEDは中程度の分離レベルで全異常は防げない。SERIALIZABLEが最高レベル。

なぜ ウ は間違いか

SERIALIZABLEは直列(Serial)実行と等価な結果を保証する最高分離レベル。ランダム順序・可用性優先は正反対の説明。

なぜ ア は間違いか

READ UNCOMMITTEDはコミット前データも読めるため、最も整合性が低い(危険な)レベル。整合性が高いのはSERIALIZABLE。

出典: AI生成問題(学習用)