令和6年度 秋期 データベーススペシャリスト試験 午前II 問14
テクノロジデータベース
この問題は2024(R6)秋 データベーススペシャリスト 午前IIに出題されたものです。出題時点の法令・制度に基づく内容のため、現行の内容と一致しない場合があります。
本ページの問題文・選択肢は、原本の体裁を Web 表示用に正規化しています(改行・記号・数式・図表参照の調整)。設問の趣旨および正解に影響する変更は加えていません。
トランザクションPが資源Xの値を4から5に更新した後にトランザクションQが開始し,Pがコミットする前にQが資源Xを参照しようとした。Qの挙動のa,bに入れる字句の組み合わせはどれか。ただし,隔離性水準は READ COMMITTED とする。
〔Qの挙動〕
同時実行制御が単版2相ロッキングプロトコルの場合Qは a,多版同時実行制御(MVCC)の場合Qは b。

図の説明テキスト
| a | b | |
|---|---|---|
| ア | P がコミット完了するまで待機した後,X の値 5 を得る | P のコミット完了を待機することなく,X の値 4 を得る |
| イ | P がコミット完了するまで待機した後,X の値 5 を得る | P のコミット完了を待機することなく,X の値 5 を得る |
| ウ | P のコミット完了を待機することなく,X の値 4 を得る | P のコミット完了を待機することなく,X の値 5 を得る |
| エ | P のコミット完了を待機することなく,X の値 5 を得る | P のコミット完了を待機することなく,X の値 4 を得る |
解答・解説を読む
正解: 選択肢ア
トランザクションの同時実行制御における 単版2相ロッキングプロトコル と 多版同時実行制御(MVCC) の挙動の違いを問う問題です。
隔離性水準は READ COMMITTED (コミット済みのデータのみ読み取り可能)と指定されています。
空欄a(単版2相ロッキングプロトコル)
単版2相ロッキングプロトコルでは、データの更新時に 排他ロック(Xロック) を取得し、参照時に 共有ロック(Sロック) を取得します。
- トランザクションPは、資源Xを更新するために排他ロックを取得しています。
- トランザクションQは、READ COMMITTED のため、資源Xを読み取るために共有ロックを取得しようとします。
- 排他ロックと共有ロックは競合するため、QはPがコミット(またはロールバック)してロックを解放するまで 待機 します。
- Pがコミット完了するとXの値は5として確定し、Qはロックを取得して Xの値5 を読み取ります。
空欄b(多版同時実行制御:MVCC)
MVCCでは、データの更新が行われる際に上書きするのではなく、新しい バージョン(版) を作成して保持します。
- PがXの値を4から5に更新しても未コミットであるため、システム内には「確定済みの古いバージョン(4)」と「未確定の新しいバージョン(5)」が共存します。
- 隔離性水準が READ COMMITTED の場合、Qはロック待ちをすることなく、読み取り時点における最新のコミット済みデータである 古いバージョン(4) を即座に読み取ります。
- したがって、QはPのコミットを待機することなく Xの値4 を得ます。
各選択肢の解説
- ア:正解です。上記で説明した通り、aでは待機して値5を得て、bでは待機せずに値4を得ます。
- イ:bにおいて、MVCCでは未コミットの新しい値5を読み取ることはありません(読み取るとダーティリードになります)。READ COMMITTED ではコミット済みの値4を読み取ります。
- ウ:aにおいて、単版2相ロッキングプロトコルではロックの競合が発生するため、待機することなく読み取れるという説明は誤りです。
- エ:aにおいて、待機することなく読み取るという説明は誤りです。MVCC(空欄b)の挙動と逆の説明が含まれています。