データベーススペシャリスト午後I 事例記述平成29年 春期
午後I 問2

問2 トランザクションの排他制御に関するデータベース設計・実装

テーマ:トランザクションの排他制御とSQL設計
左右2分割表示:左側の問題文をスクロールしながら右側の設問に解答できます

長文事例本文

図表クリックで拡大
問2 トランザクションの排他制御に関する次の記述を読んで,設問1〜3に答えよ。  Y社は,オフィスじゅう器メーカである。現在,在庫管理システムのアプリケーションプログラム(以下,APという)の改修を実施している。 〔在庫管理システムのテーブル〕  在庫管理システムの主なテーブル構造を,図1に示す。各テーブルには主索引が定義されている。
図1 主なテーブル構造 拡大
図1 主なテーブル構造
〔在庫管理業務の概要〕 (1) 各地の生産拠点には,組立工場と,これに隣接する倉庫がそれぞれ一つ配置されている。 (2) 倉庫からの部品の出庫には,倉庫から隣接する組立工場に出庫する場合と,倉庫から他の生産拠点の倉庫に出庫する場合がある。 (3) 倉庫は,倉庫コードで一意に識別され,組立工場は,工場コードで一意に識別される。生産拠点を識別するコードは存在しない。 (4) 定期便は,倉庫間で部品を配送する便であり,便番号で一意に識別される。 (5) 部品は,部品番号で一意に識別される。 (6) 部品の在庫は,倉庫と部品の組合せで,その数量をもつ。倉庫内に存在する在庫を,倉庫内在庫と呼ぶ。このうち,隣接する組立工場又は他の生産拠点の倉庫に向けて出庫対象となったものを,出庫対象在庫と呼ぶ。 (7) 出庫要求とは,倉庫に対して部品の出庫を要求することである。“出庫”テーブルに出庫要求の内容が登録され,処理状況に‘要求発生’が記録される。出庫番号は,出庫要求の発生順の一意な連番である。組立工場が出庫要求する場合,出庫先倉庫コード及び出庫便番号の値は NULL となり,出庫先工場コードが記録される。他の生産拠点の倉庫が出庫要求する場合,出庫先工場コードは NULL となり,出庫先倉庫コードが記録され,出庫便番号には該当する定期便の便番号が記録される。 (8) 在庫引当とは,出庫要求に応じて倉庫内の在庫を引き当てることである。在庫引当 AP は,毎日の業務中に定期的に実行され,その時点で登録されている出庫要求を処理する。指定された倉庫コード,部品番号,出庫数量の出庫が可能かどうかチェックし,出庫可能であれば出庫対象在庫数量を更新する。在庫引当が完了したら,処理状況は‘引当実施’に更新される。 (9) 出庫とは,出庫要求に従って,倉庫から部品を出すことである。出庫は多頻度で行われるので,出庫ごとに在庫は更新されず,出庫確定 AP でまとめて更新される。 (10) 出庫確定 AP は,毎日の業務終了時に実行される。“出庫”テーブルの処理状況が‘引当実施’のものを対象に,倉庫内在庫数量及び出庫対象在庫数量が更新され,処理が完了したら,処理状況は‘出庫実施’に更新される。 (11) 入庫とは,他の生産拠点の倉庫で出庫された部品を倉庫に入れることである。入庫による在庫の更新は,在庫引当 AP 及び出庫確定 AP と同時に実行されることはない。 〔RDBMSの排他制御〕 (1) 在庫管理システムのRDBMSで選択できるトランザクションの ISOLATION レベルとその排他制御は,表1のとおりである。  ロックは行単位で掛ける。共有ロックが掛かっている間,他のトランザクションからの対象行の参照は可能であり,更新は共有ロックの解放待ちとなる。専有ロックが掛かっている間,他のトランザクションからの対象行の参照,更新は専有ロックの解放待ちとなる。
表1 トランザクションのISOLATIONレベルとその排他制御 拡大
表1 トランザクションのISOLATIONレベルとその排他制御
(2) 索引を使わずに,テーブルスキャンですべての行に順次アクセスする場合,検索条件に合致するか否かにかかわらず全行がロック対象となる。索引スキャンの場合,索引から読み込んだ行だけがロック対象となる。 〔分析機能の追加〕  適切な生産計画を立てるために,部品ごとに在庫数量,出庫数量の日別の推移状況を見たいという要望があり,そのための集計 AP を追加した。集計 AP で実行する SQL の一部を,表2に示す。SQL1 は各部品の出庫年月日ごとの出庫数量を集計する。また,SQL1 では,出庫が全くない部品も集計対象とする。SQL2 は,各部品の倉庫間の出庫について,出庫年月日,出庫元倉庫,出庫先倉庫ごとに出庫数量を集計する。
表2 集計APで実行するSQLの構文(未完成) 拡大
表2 集計APで実行するSQLの構文(未完成)
〔在庫引当 AP の改修〕  在庫管理システムでは,トランザクションの ISOLATION レベルを REPEATABLE READ として設計,運用していた。システムの改修に当たり,在庫引当 AP のトランザクションの ISOLATION レベルを READ COMMITTED に変更することにした。ISOLATION レベルの変更で問題が発生しないように在庫引当 AP を改修した。  改修前の在庫引当 AP は図2,改修後の在庫引当 AP は図3のとおりである。これらの AP の実行に先立って,“出庫”テーブルの処理状況が‘要求発生’の行を抽出し,出庫先倉庫ごとに分割したファイルを作成する。それぞれのファイルのレコードは,出庫番号順に記録されている。作成したファイルを入力として,在庫引当 AP を並列実行している。在庫引当 AP は,入力ファイルのレコードごとに繰り返し実行される。  なお,図2,3中のホスト変数 hv0 は出庫番号,hv1 は出庫元倉庫コード,hv2 は部品番号,hv3 は出庫数量を表す。hv4 と hv5 は,検索結果を返す出力ホスト変数を表す。
図2 REPEATABLE READで実行していた改修前の在庫引当AP 拡大
図2 REPEATABLE READで実行していた改修前の在庫引当AP
図3 READ COMMITTEDで実行する改修後の在庫引当AP(未完成) 拡大
図3 READ COMMITTEDで実行する改修後の在庫引当AP(未完成)
〔出庫確定 AP の改修〕  出庫確定 AP の処理に掛かる時間を短縮するために,出庫確定 AP を並列に多重プロセスで実行するように変更することにした。“出庫”テーブルの出庫番号の値の範囲指定で各プロセスに均等に配分して,REPEATABLE READ で並列実行する。出庫確定 AP の概要は,図4のとおりである。 ``` 1. “出庫”テーブルに登録されている,指定された範囲内の出庫番号の昇順に,各行ごとに次の2の処理を行う。 2. “出庫”テーブルを参照して,処理要否を判定する。処理状況が‘引当実施’の場合だけ次の2-1〜2-3を実行する。  2-1. “在庫”テーブルの倉庫内在庫数量を更新(出庫数量分を減算)する。  2-2. “在庫”テーブルの出庫対象在庫数量を更新(出庫数量分を減算)する。  2-3. “出庫”テーブルの処理状況を‘出庫実施’に更新する。 3. “出庫”テーブルの指定された範囲内の全ての行の処理が完了したら,COMMITする。 ``` 図4 出庫確定 AP の概要

設問一覧 & 解答・演習

まずは解答を作成してみましょう。「解答例を見る」をクリックするとIPA公式解答例と採点基準が開きます。

設問1 a記号・選択式
〔分析機能の追加〕について,表2中の a に入れる適切な字句を答えよ。
※直接入力してください
設問1 b記号・選択式
〔分析機能の追加〕について,表2中の b に入れる適切な字句を答えよ。
※直接入力してください
設問1 c記号・選択式
〔分析機能の追加〕について,表2中の c に入れる適切な字句を答えよ。
※直接入力してください
設問1 d記号・選択式
〔分析機能の追加〕について,表2中の d に入れる適切な字句を答えよ。
※直接入力してください
設問1 e記号・選択式
〔分析機能の追加〕について,表2中の e に入れる適切な字句を答えよ。
※直接入力してください
設問2 (1)記述問題
制限字数:60 字以内
図2の改修前の在庫引当 AP が,REPEATABLE READ で複数同時に実行されるとデッドロックが発生するおそれがある。どのような場合にデッドロックが発生するか,AP 間の SQL の実行状況を,図2中の丸数字を用いて60字以内で述べよ。
0 / 60 文字
設問2 (2) 実行状況記号・選択式
図2の改修前の在庫引当 AP が,READ COMMITTED で同じ倉庫の同じ部品に対して複数同時に実行されると,在庫数量が不正になるおそれがある。在庫数量が不正になる AP の実行状況を図5に示す。不正になるのは,AP2 の①〜④の各 SQL が,t2,t4,t6,t8 のどの時間帯で実行された場合か,該当する時間帯に①〜④を記入せよ。ここで,一つの時間帯に複数の SQL を実行できる。
※直接入力してください
設問2 (2) 状態記述問題
制限字数:30 字以内
図2の改修前の在庫引当 AP が,READ COMMITTED で同じ倉庫の同じ部品に対して複数同時に実行され,在庫数量が不正になった場合,在庫数量が不正とは具体的にどのような状態か,30字以内で述べよ。
0 / 30 文字
設問2 (3)記号・選択式
図3中の f に入れる適切な字句を答えよ。
※直接入力してください
設問3 (1) ア記号・選択式
〔出庫確定 AP の改修〕について,スループットがさほど向上しなかったボトルネックを説明する記述中の ア に入れる適切な字句を答えよ(アとイは順不同)。
【選択肢】 クリックして選択
選択中の解答:未選択(上の選択肢ボタンをクリックしてください)
設問3 (1) イ記号・選択式
〔出庫確定 AP の改修〕について,スループットがさほど向上しなかったボトルネックを説明する記述中の イ に入れる適切な字句を答えよ(アとイは順不同)。
※直接入力してください
設問3 (1) ウ記号・選択式
〔出庫確定 AP の改修〕について,スループットがさほど向上しなかったボトルネックを説明する記述中の ウ に入れる適切な字句を答えよ。
※直接入力してください
設問3 (1) エ記号・選択式
〔出庫確定 AP の改修〕について,スループットがさほど向上しなかったボトルネックを説明する記述中の エ に入れる適切な字句を答えよ。
※直接入力してください
設問3 (2) オ記号・選択式
〔出庫確定 AP の改修〕について,(1)のボトルネックを解消するための変更を説明する記述中の オ に入れる適切な字句を答えよ(オとカは順不同)。
※直接入力してください
設問3 (2) カ記号・選択式
〔出庫確定 AP の改修〕について,(1)のボトルネックを解消するための変更を説明する記述中の カ に入れる適切な字句を答えよ(オとカは順不同)。
※直接入力してください
設問3 (2) キ記号・選択式
〔出庫確定 AP の改修〕について,(1)のボトルネックを解消するための変更を説明する記述中の キ に入れる適切な字句を答えよ。
※直接入力してください
設問3 (2) ク記号・選択式
〔出庫確定 AP の改修〕について,(1)のボトルネックを解消するための変更を説明する記述中の ク に入れる適切な字句を答えよ。
※直接入力してください
設問3 (2) ケ記号・選択式
〔出庫確定 AP の改修〕について,(1)のボトルネックを解消するための変更を説明する記述中の ケ に入れる適切な字句を答えよ。
※直接入力してください
午後I長文記述の得点力を引き上げる定番対策書Amazon・楽天 公式提携
PR
徹底攻略 データベーススペシャリスト教科書 令和8年度
IPA 厳選対策書徹底攻略 データベーススペシャリスト教科書 令和8年度株式会社わくわくスタディワールド 瀬戸 美月 著 / インプレス
DB徹底攻略
株式会社わくわくスタディワールド 瀬戸 美月 著 / インプレス

徹底攻略 データベーススペシャリスト教科書 令和8年度

💡 推薦ポイント:午後I・午後IIの概念データモデル穴埋めや排他制御・性能設計の記述問題で確実に合格点を勝ち取る実践テクニックが満載です。
※本リンク先はプロモーション(アフィリエイト広告)が含まれています
【出題趣旨】IPA公式発表
オンライントランザクションシステムでは,同時実行される各アプリケーションプログラムが,相互に影響して予期せぬ結果を発生させることのないように,アプリケーションプログラムの処理内容や,実行順序を注意深く設計する必要がある。 本問では,在庫管理システムを題材に,SQL の設計能力に加えて,トランザクション制御及び排他制御を理解して,適切な同時実行性を満たす設計能力を問う。
【採点講評】IPA公式発表
問2 では,在庫管理システムを題材に,トランザクションの排他制御について出題した。全体として正答率は低かった。 設問1 は,正答率が高かった。d の列名と,e のNULL/NOT NULL の組合せが誤っている解答が散見された。SQL 文にどのような結果を求めているのかを理解した上で,状況記述を十分に確認して必要な条件を読み取ってほしい。 設問2 は,正答率が低かった。同一テーブル内,また同一行を対象としたデッドロックについて理解していない受験者が多かったと思われる。特に(1)は,複数のテーブル又は行を対象としたデッドロックの一般論を記述しただけの誤った解答が目立った。デッドロックを回避するために,デッドロックが発生する原因について,理解を深めてもらいたい。 設問3 は,正答率が高かったが,(1)エと(2)クの正答率は低かった。問題文中で与えられた排他制御の仕組みを落ち着いて読めば,正答を導けるはずである。
本番形式・制限時間付きで演習する
平成29年 春期 午後I(3問中2問選択・90分)を実戦演習モードで通し解答し、総合採点を受けられます。
実戦演習を始める