IPA過去問ドリル

平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17

テクノロジ/データベース

図は,ある探索条件を使って数学模試の平均点を算出している間,当該探索条件に合致するA君の結果を“数学模試成績”表に登録したときの様子を示している。平均点を求めるトランザクションT1と,登録作業のトランザクションT2が①~⑥の順序で処理された結果,合計点算出時の受験者数と平均点算出時の受験者数が異なり,正しい平均点を得ることができなかった。このとき発生した事象はどれか。ここで,トランザクションの隔離性水準はREAD UNCOMMITTEDであったとする。 〔処理の順序(時刻順)〕 ①(T1)“数学模試成績”表の登録済データから,合計点Xを算出 ②(T2)A君の結果を“数学模試成績”表に登録 ③(T2)COMMIT ④(T1)“数学模試成績”表の登録済データから,受験者数Yを算出 ⑤(T1)XをYで除算し,数学模試の平均点を算出 ⑥(T1)COMMIT (注:本サイトでは原問題の図を文字表記に変換しています)

出典:平成29年度 春期 データベーススペシャリスト試験 午前Ⅱ 問17

正解:エ

解説

ファントムリードとは,同一トランザクション内で同じ検索条件による問合せを複数回行ったとき,他のトランザクションが新たな行を挿入・コミットしたことによって,2回目以降の問合せ結果に前回は無かった行が新たに現れる(幻のように出現する)現象です。本問では,T1が①で“数学模試成績”表から合計点Xを算出した後,T2が②でA君の結果を新たに登録し③でコミットしたため,T1が④で受験者数Yを算出したときには,Xの算出時には存在しなかったA君のデータが含まれてしまい,合計点算出時の受験者数と平均点算出時の受験者数が食い違う結果となりました。これはファントムリードの典型的な事象です。

選択肢ごとの解説

  • 誤り。アンリピータブルリード(非再現性読取り)は,同一の行を再度読み込んだときに,他のトランザクションによる更新によって値が変わっている現象を指します。本問は既存の行の値が変わったのではなく,新しい行(A君のデータ)が加わったことによる集計結果の食い違いなので,該当しません。
  • 誤り。シーケンシャルリードは単にデータを順番に読み込むアクセス方式を指す用語であり,同時実行制御に関する異常現象ではありません。
  • 誤り。ダーティリードは,他のトランザクションがまだコミットしていない未確定のデータを読み込んでしまう現象です。本問ではT2は④より前の③で既にCOMMITを完了しており,T1はコミット済みのデータを読んでいるため,ダーティリードには該当しません。
  • 正しい。T2がA君のデータを挿入・コミットしたことで,T1が同じ探索条件で“数学模試成績”表を再度検索した際に,最初の合計点算出時には存在しなかった行が新たに現れており,これはファントムリードに該当します。
データベーススペシャリストの過去問を演習モードで解く