スキップしてメイン コンテンツに移動

平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ 問2 設問2 (1)

平成26年度 春期 データベーススペシャリスト試験 午後Ⅰ
http://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2014h26_1/2014h26h_db_pm1_qs.pdf

問2

 設問2 〔会議室予約システムについての改良案〕について,(1)~(3)に答えよ。

 (1) 同じ日に,同じ会議室に対して予約が集中する状況を想定すると,図5中の②でコミットを行わない場合,スル-プットが低下する。その原因となる処理を図5中の番号で答えよ。また,原因を25字以内で述べよ。


〔会議室予約システムについての改良案〕

 ダブルブッキングを防ぐために図4,表4の”日別予約管理”テーブルを追加し、予約処理内容を図5のように改良することを検討した。



 日別予約管理(会議室番号予約日,予約処理中フラグ)


図4 追加する”日別予約管理”テーブルのテーブル構造


表4 追加する”日別予約管理”テーブルの概要

テーブル名概要
日別予約管理・会議室予約テーブルへの登録の可否を判断するために用いる。
・予約処理中フラグには,’Y’と’N’のいずれかが設定される。
 ’Y’は予約処理中を表し、’N’は予約処理中でないことを表す。
・予約受付対象の全ての会議室番号,予約日の組み合わせは,
 予約処理中フラグの初期値を’N’としてあらかじめ登録されている。


予約処理中フラグをUPDATE文で’Y’に更新する。更新できたか否かを記憶する。
UPDATE 日別予約管理 SET 予約処理中フラグ = 'Y'
WHERE 会議室番号 = :hv4 AND 予約日 = :hv1
AND 予約処理中フラグ='N'
コミットする。
指定された条件に予約が入っているかをSELECT文で確認する。
SELECT * FROM 会議室予約
WHERE 会議 = :hv4 AND 予約日 = :hv1
AND Y.予約開始時刻  b  :hv3 AND Y.予約終了時刻  c  :hv2
①で予約処理中フラグを更新できており,③で結果行がない場合は,⑤に進む。
①で予約処理中フラグを更新できており,③で結果行がある場合は,予約失敗
として⑥に進む。
①で予約処理中フラグを更新できておらず,③で結果行がない場合は,①に戻る。
①で予約処理中フラグを更新できておらず,③で結果行がある場合は,予約失敗
として⑧に進む。
指定された条件の予約をINSERT文で登録して、予約成功とする。
INSERT INTO 会議室予約(会議室番号,予約日,予約開始時刻,予約終了時刻,社員番号)
VALUES(:hv4,:hv1,:hv2,:hv3,:hv5)
予約処理中フラグをUPDATE文で’N’に更新する。
UPDATE 日別予約管理 SET 予約処理中フラグ = 'N'
WHERE 会議室番号 = :hv4 AND 予約日 = :hv1
コミットする。
予約の成否を通知する。

図5 予約処理内容完了案



 社員(社員番号,社員氏名,…)

 会議室(会議室番号,収容可能人数,階数,プロジェクタ設置有無,TV会議設備設置有無,…)

 会議室予約(会議室番号予約日予約開始時刻,予約終了時刻,社員番号


図1 主要なテーブルのテーブル構造(一部省略)


 スループットが低下するということは、操作後の応答が正常でも異常でもなく、待たされると
いうこと。待ちの原因を特定すること。


ロックに関することを再確認する。

〔RDBMSのトランザクション制御〕

 会議室予約システムで使用するRDBMSのトランザクションのISOLATIONレベルは
READ COMMITTEDであり,行単位でロックをかける。データ参照時には共有ロックをかけ,
参照終了時に解放する。データ更新時には専有ロックをかけ,トランザクション終了時に
解放する。専有ロックがかかっている間,他のトランザクションからの対象行の参照,更新は
専有ロックの開放待ちとなる。


【回答】

原因となるのは ①

後続の更新処理は専用ロックで開放待ちとなるため。(。を含め24文字)


コメント