令和4年秋期試験問題 午前Ⅱ 問14

トランザクションT1がある行Xを読んだ後,別のトランザクションT2が行Xの値を更新してコミットし,再びT1が行Xを読むと,以前読んだ値と異なる値が得られた。この現象を回避するSQLの隔離性水準のうち,最も水準の低いものはどれか。

  • READ COMMITTED
  • READ UNCOMMITTED
  • REPEATABLE READ
  • SERIALIZABLE
正解 問題へ
分野 :テクノロジ系
中分類:データベース
小分類:トランザクション処理
解説
隔離性水準とは、トランザクションに指定できる直列化制約の度合いで、隔離性の低い順に「READ UNCOMMITTED」「READ COMMITTED」「REPEATABLE READ」そして「SERIALIZABLE」の4種類があります。

これらは、SQLの"SET TRANSACTION"文に記述され、トランザクションを同時実行したことで発生する異常のうち、どのレベルまでを許容するかを指定するものです。4つの中では以下に示すようにSERIALIZABLEが最も安全ですが、堅牢性と引き換えに処理効率が悪くなります。一般的なDBMSでは「READ COMMITTED」がデフォルトになっています。

トランザクションの同時実行が原因で生じる3つの異常と、隔離性水準ごとの許容レベルをまとめると次のようになります。
ダーティリード(汚読)
他のトランザクションが更新したコミット前の値(ダーティデータ)を読み、その後更新処理を行ったトランザクションがロールバックされると、存在しない値を読み込んだことになってしまう異常
ノンリピータブルリード(再現不可能な読み)
同じトランザクションで複数回の読込みを行ったとき、読込む度に値が変わってしまう異常。2回の読込みの間に、別のトランザクションがそのデータを更新したことが原因で発生する。
ファントムリード(幽霊)
同じトランザクションで複数回の読込みを行ったとき、前回は存在しなかった行が現れる異常。2回の読込みの間に、別のトランザクションがテーブルに行を挿入したことが原因で発生する。
14.png
設問の現象はノンリピータブルリードと呼ばれる異常で、回避するには「REPEATABLE READ」または「SERIALIZABLE」を指定する必要があります。したがって、より隔離性水準が低い「REPEATABLE READ」が正解となります。

Pagetop