ホーム > データベーススペシャリスト試験 > 2019年
データベーススペシャリスト試験 2019年 午前2 問18
DBMSの多版同時実行制御(MVCC)に関する記述として, 適切なものはどれか。
ア:同時実行される二つのトランザクションのうち, 先発のトランザクションがデータを更新し, コミットする前に, 後発のトランザクションが同じデータを参照すると, 更新前の値を返す。(正解)
イ:トランザクションがデータを更新する前に専有ロックを, 参照する前に共有ロックを掛け, コミットかロールバック後に全てアンロックする。
ウ:トランザクションがデータを更新する前に専有ロックを, 参照する前に共有ロックを掛け, 専有ロックはコミットかロールバック後までアンロックしないが, 共有ロックは不必要になったらアンロックする。
エ:トランザクションがデータを更新する前にロックを掛けず, コミット直前に他のトランザクションがそのデータを更新したかどうか確認し, 更新していないときだけコミットする。
解説
多版同時実行制御(MVCC: Multi-Version Concurrency Control)についての解説
MVCCの基本的な考え方
MVCCは、データベース管理システム(DBMS)において、同時に複数のトランザクションがデータにアクセスしても整合性を保ちつつ、高い並行性を実現する手法です。
従来のロックベースの制御方法と異なり、ロックをかける代わりに、データの複数のバージョン(多版)を保持し、各トランザクションが「見える」バージョンを切り替えることで整合性を保ちます。
選択肢「ア」が正しい理由
ア: 同時実行される二つのトランザクションのうち, 先発のトランザクションがデータを更新し, コミットする前に, 後発のトランザクションが同じデータを参照すると, 更新前の値を返す。
これはMVCCの本質をよく表しています。
- 先に開始したトランザクション(先発)はデータを更新しても、コミットするまでその更新のバージョンは確定しません。
- 後から開始したトランザクション(後発)が更新中のデータを参照した場合、先発の「未コミット」データは見えないため、更新前の安定したバージョン(前の値)を返すことになります。
この仕組みにより、**読み取り一貫性(読み取り視点の一貫性)**が保たれ、トランザクション間での不整合な読み取りを防止しています。
他の選択肢の問題点
-
イ, ウ: これはロックベースの同時実行制御に関する記述です。
MVCCはロックではなく「バージョン管理」によって制御を行うため、これらの選択肢はMVCCの特徴を表していません。 -
エ: これは楽観的同時実行制御に近い手法の説明ですが、MVCCの基本的な動作ではありません。
MVCCの動作イメージ
- トランザクション開始時点でタイムスタンプ(またはトランザクションID)を取得。
- データ更新時は新しいバージョンの行を作成し、古いバージョンも保持。
- 参照時には、トランザクションの開始時点より新しいバージョンは見えず、その時点で有効な最新のバージョンを読み取る。
- コミットすると、その更新バージョンが正式な最新状態となる。
まとめ
- MVCCでは更新中(未コミット)のデータは他トランザクションからは見えず、古いバージョンが参照される。
- これにより読み取り処理がロックにブロックされず高効率。
- よって、選択肢アの記述がMVCCの特徴を正しく説明しています。
以上の理由から、正しい答えは ア です。