問題
データベースのトランザクション分離レベルに関する記述として、適切なものはどれか。
ア)分離レベルを「READ UNCOMMITTED」に設定すると、他のトランザクションがまだコミットしていない変更(未コミットのデータ)を読み取ってしまう「ダーティリード」が発生する可能性がある。
イ)分離レベルを最も厳格な「SERIALIZABLE」に設定すると、トランザクションの並行実行による性能上のオーバーヘッドは一切発生しない。
ウ)「REPEATABLE READ」は、分離レベルの中で最も緩い設定であり、あらゆる読み取り異常が発生しうる。
エ)分離レベルは、データベースの物理的な格納方式を定める設定であり、トランザクションの並行制御とは無関係である。
解答・解説を見る
正解: ア)
解説:
- ア)分離レベル「READ UNCOMMITTED」は最も緩い分離レベルであり、他のトランザクションがまだコミットしていない(ロールバックされる可能性のある)変更後のデータを読み取ってしまう「ダーティリード」が発生し得ます。正解です。
- イ)「SERIALIZABLE」は最も厳格な分離レベルで、トランザクションをあたかも順番に(直列に)実行したのと同じ結果を保証しますが、そのためにロックの範囲が広がるなど並行実行の自由度が下がり、一般に性能上のオーバーヘッドが増加する傾向があります。「一切発生しない」は誤りです。
- ウ)「REPEATABLE READ」は、READ UNCOMMITTEDやREAD COMMITTEDよりも厳格な分離レベルであり、最も緩い設定ではありません。分離レベルの厳格さは一般に「READ UNCOMMITTED < READ COMMITTED < REPEATABLE READ < SERIALIZABLE」の順に強くなり、記述は誤りです。
- エ)分離レベルは、複数のトランザクションが並行実行された際に、互いの処理がどの程度独立して見えるか(並行制御・ロックの挙動)を定める設定であり、物理的な格納方式とは異なる概念です。誤りです。
重要キーワード
| 用語 | 説明 |
|---|---|
| ダーティリード | 未コミットのデータを読み取ってしまう読み取り異常 |
| READ UNCOMMITTED | 最も緩い分離レベル |
| SERIALIZABLE | 最も厳格な分離レベル |
| 分離レベル | トランザクションの並行実行時の独立性の度合いを定める設定 |