多版同時実行制御(MVCC)による読取り一貫性とスナップショット分離

DBMSの並行性制御技術である多版同時実行制御(MVCC: Multi-Version Concurrency Control)に関する問題です。 MVCCでは、データを更新する際に元のデータを直接上書きせず、タイムスタンプやトランザクション番号を付与した新しいバージョン(版)を追加保存します。 データの参照トランザクションは、トランザクション開始時点(または文開始時点)でコミット済みであった最新の過去バージョンを読み取ります(スナップショット分離)。 このため、あるトランザクションがデータを更新中であっても参照処理を一切ブロックせず、同時に参照処理も更新処理をブロックしません(読取りと書込みが互いに干渉しない)。 したがって、「先発のトランザクションがデータを更新し,コミットする前に,後発のトランザクションが同じデータを参照すると,更新前の値を返す」とした ア が適切です。 更新前に専有ロック、参照前に共有ロックを掛け、コミット後に一括解除する方式は、厳密な2相ロック法(Strict 2PL)の説明です。 共有ロックを不要になった時点で早期解除する方式は、一般的な2相ロック(2PL)の縮小相の動作であり、MVCCの説明ではありません。 ロックを掛けずに処理を行い、コミット直前に検証(Validation)を行って競合がなければコミットする方式は、楽観的並行性制御(OCC: Optimistic Concurrency Control)の説明です。

DBMSの多版同時実行制御 (MVCC) に関する記述として,適切なものはどれか。

出典平成31年春期 午前Ⅱ
ア
同時実行される二つのトランザクションのうち,先発のトランザクションがデータを更新し,コミットする前に,後発のトランザクションが同じデータを参照すると,更新前の値を返す。
イ
トランザクションがデータを更新する前に専有ロックを,参照する前に共有ロックを掛け,コミットかロールバック後に全てアンロックする。
ウ
トランザクションがデータを更新する前に専有ロックを,参照する前に共有ロックを掛け,専有ロックはコミットかロールバック後までアンロックしないが,共有ロックは不必要になったらアンロックする。
エ
トランザクションがデータを更新する前にロックを掛けず,コミット直前に他のトランザクションがそのデータを更新したかどうか確認し,更新していないときだけコミットする。