平成31年度 春期 データベーススペシャリスト試験 午前II 問18
【問題18】
DBMSの多版同時実行制御(MVCC)に関する記述として,適切なものはどれか。
同時実行される二つのトランザクションのうち,先発のトランザクションがデータを更新し,コミットする前に,後発のトランザクションが同じデータを参照すると,更新前の値を返す。
トランザクションがデータを更新する前に専有ロックを,参照する前に共有ロックを掛け,コミットかロールバック後に全てアンロックする。
トランザクションがデータを更新する前に専有ロックを,参照する前に共有ロックを掛け,専有ロックはコミットかロールバック後までアンロックしないが,共有ロックは不要になったらアンロックする。
トランザクションがデータを更新する前にロックを掛けず,コミット直前に他のトランザクションがそのデータを更新したかどうか確認し,更新していないときだけコミットする。
【解説】
MVCCは Multi-Version Concurrency Control(多版同時実行制御)の略です。この仕組みは、トランザクションごとにスナップショットを利用して、同時実行を可能にしつつ一貫性を保つことを目的としています。
ア: 同時実行される二つのトランザクションのうち,先発のトランザクションがデータを更新し,コミットする前に,後発のトランザクションが同じデータを参照すると,更新前の値を返す。
正しい。MVCCでは、データのバージョン管理を行い、後発のトランザクションが更新中のデータにアクセスしても、更新前のスナップショットを返します。
イ: トランザクションがデータを更新する前に専有ロックを,参照する前に共有ロックを掛け,コミットかロールバック後に全てアンロックする。
誤り。これはロックベースの同時実行制御の手法であり、MVCCの特徴ではありません。
ウ: トランザクションがデータを更新する前に専有ロックを,参照する前に共有ロックを掛け,専有ロックはコミットかロールバック後までアンロックしないが,共有ロックは不要になったらアンロックする。
誤り。ロックベースの手法であり、MVCCのようにロックを用いずにバージョンを管理する手法とは異なります。
エ: トランザクションがデータを更新する前にロックを掛けず,コミット直前に他のトランザクションがそのデータを更新したかどうか確認し,更新していないときだけコミットする。
誤り。この記述は楽観的ロックの手法に近いですが、MVCCの特徴ではありません。
【答え】
ア: 同時実行される二つのトランザクションのうち,先発のトランザクションがデータを更新し,コミットする前に,後発のトランザクションが同じデータを参照すると,更新前の値を返す。
出典:平成31年度 春期 データベーススペシャリスト試験 午前II 問18