令和4年度 秋期 データベーススペシャリスト試験 午後Ⅰ 問題 問3 販売管理システムのバッチ性能とデッドロック・出庫遅延の分析

学習ガイド

事務用品販売会社の販売管理システムで、ピーク日のバッチ遅延と出庫作業の遅延を分析する問題です。表領域と空き領域の仕組みから再編成の効果を判断し、ジョブ多重化で生じるデッドロックの箇所を整理し、出庫間隔時間をSQLで求めて棚の混雑を突き止めます。RDBMSの仕様と業務の流れを結び付けて性能問題を読み解きます。

この記事で押さえる論点

  • 表領域・ページ・空き領域の仕組みから、行の挿入で予約した空き領域が使われない理由と再編成の要否を判断できる
  • バッチジョブを注文番号の範囲で多重化したときに、どの処理間・どのテーブルでデッドロックが起きるかを表3で整理できる
  • 出庫開始時刻と出庫時刻から出庫間隔時間を求めるSQL(ウィンドウ関数)を組み立てられる
  • 特定の棚へのピッカー集中を出庫間隔時間の分析から突き止め、対策を導ける

問題本文

問3 データベースの実装と性能に関する次の記述を読んで,設問に答えよ。

事務用品を関東地方で販売するC社は,販売管理システム(以下,システムという)にRDBMSを用いている。

〔RDBMSの仕様〕

  1. 表領域
    (1) テーブル及び索引のストレージ上の物理的な格納場所を,表領域という。
    (2) RDBMSとストレージとの間の入出力単位を,ページという。同じページに,異なるテーブルの行が格納されることはない。
  2. 再編成,行の挿入
    (1) テーブルを再編成することで,行を主キー順に物理的に並び替えることができる。また,再編成するとき,テーブルに空き領域の割合(既定値は 30%)を指定した場合,各ページ中に空き領域を予約することができる。
    (2) INSERT文で行を挿入するとき,RDBMSは,主キー値の並びの中で,挿入行のキー値に近い行が格納されているページを探し,空き領域があればそのページに,なければ表領域の最後のページに格納する。最後のページに空き領域がなければ,新しいページを表領域の最後に追加し,格納する。

〔業務の概要〕

  1. 顧客,商品,倉庫
    (1) 顧客は,C社の代理店,量販店などで,顧客コードで識別する。顧客にはC社から商品を届ける複数の発送先があり,顧客コードと発送先番号で識別する。
    (2) 商品は,商品コードで識別する。
    (3) 倉庫は,1か所である。倉庫には複数の棚があり,一連の棚番号で識別する。商品の容積及び売行きによって,一つの棚に複数種類の商品を保管することも,同じ商品を複数の棚に保管することもある。
  2. 注文の入力,注文登録,在庫引当,出庫指示,出庫の業務の流れ
    (1) 顧客は,C社が用意した画面から注文を希望納品日,発送先ごとに入力し,C社のEDIシステムに蓄える。注文は,単調に増加する注文番号で識別する。注文する商品の入力順は自由で,入力後に商品の削除も同じ商品の追加もできる。
    (2) C社は,毎日定刻(9時と14時)に注文を締める。EDIシステムに蓄えた注文をバッチ処理でシステムに登録後,在庫を引き当てる。
    (3) 出庫指示書は,当日が希望納品日である注文ごとに作成し,倉庫の出庫担当者(以下,ピッカーという)を決めて,作業開始の予定時刻までにピッカーの携帯端末に送信する。携帯端末は,棚及び商品のバーコードをスキャンする都度,システム中のオンラインプログラムに電文を送信する。
    (4) 出庫は,ピッカーが出庫指示書の指示に基づいて1件の注文ごとに行う。
    ① 棚の通路の入口で,携帯端末から出庫開始時刻を伝える電文を送信する。
    ② 棚番号の順に進みながら,指示された棚から指示された商品を出庫する。
    ③ 商品を出庫する都度,携帯端末で棚及び商品のバーコードをスキャンし,商品を台車に積む。ただし,一つの棚から商品を同時に出庫できるのは1人だけである。また,順路は1方向であるが,通路は追い越しができる。
    ④ 台車に積んだ全ての商品を,指定された段ボール箱に入れて梱包する。
    ⑤ 別の携帯端末で印刷したラベルを箱に貼り,ラベルのバーコードをスキャンした後,梱包した箱を出荷担当者に渡すことで1件の注文の出庫が完了する。

〔システムの主なテーブル〕

システムの主なテーブルのテーブル構造を図1に,主な列の意味・制約を表1に示す。主キーにはテーブル構造に記載した列の並び順で主索引が定義されている。

図1 テーブル構造(一部省略)
図の説明テキスト

テーブルと列の定義が記載されている。
顧客 (顧客コード, 顧客名, …)
顧客発送先 (顧客コード, 発送先番号, 発送先名, 発送先住所, …)
商品 (商品コード, 商品名, 販売単価, 注文単位, 商品容積, …)
在庫 (商品コード, 実在庫数, 引当済数, 引当可能数, 基準在庫数, …)
棚 (棚番号, 倉庫内位置, 棚容積, …)
棚別在庫 (棚番号, 商品コード, 棚別実在庫数, 出庫指示済数, 出庫指示可能数, …)
ピッカー (ピッカーID, ピッカー氏名, …)
注文 (注文番号, 顧客コード, 注文日, 締め時刻, 希望納品日, 発送先番号, …)
注文明細 (注文番号, 注文明細番号, 商品コード, 注文数, 注文額, 注文状態, …)
出庫 (出庫番号, 注文番号, ピッカーID, 出庫日, 出庫開始時刻, …)
出庫指示 (出庫番号, 棚番号, 商品コード, 注文番号, 注文明細番号, 出庫数, 出庫時刻, …)
(主キーに該当する列には実線下線、外部参照等のキーと思われる列には破線下線が付与されている。)

表1 主な列の意味・制約(一部省略)
図の説明テキスト

表1 主な列の意味・制約(一部省略)

列名 意味・制約
棚番号 1以上の整数: 棚の並び順を表す一連の番号
注文状態 0: 未引当, 1: 引当済, 2: 出庫指示済, 3: 出庫済, 4: 梱包済, 5: 出荷済, …
出庫時刻 棚から商品を取り出し, 商品のバーコードをスキャンしたときの時刻

〔システムの注文に関する主な処理〕

注文登録,在庫引当,出庫指示の各処理をバッチジョブで順に実行する。出庫実績処理は,携帯端末から電文を受信するオンラインプログラムで実行する。バッチ及びオンラインの処理のプログラムの主な内容を,表2に示す。

表2 処理のプログラムの主な内容
図の説明テキスト

表2 処理のプログラムの主な内容

処理種別 処理名 プログラムの内容
バッチ 注文登録 ・顧客が入力したとおりに注文及び商品を, それぞれ“注文”及び“注文明細”に登録し, 注文ごとにコミットする。
バッチ 在庫引当 ・注文状態が未引当の“注文明細”を主キー順に読み込み, その順で“在庫”を更新し, “注文明細”の注文状態を引当済に更新して注文ごとにコミットする。
バッチ 出庫指示 ・当日が希望納品日である注文の出庫に, 当日に出勤したピッカーを割り当てる。
・注文状態が引当済の“注文明細”を主キー順に読み込む。
・ピッカーの順路が1方向となる出庫指示を“出庫指示”に登録する。
・“出庫指示”を主キー順に読み込み, その順で“棚別在庫”を更新し, “注文明細”の注文状態を出庫指示済に更新する。
・注文ごとにコミットし, 出庫指示書をピッカーの携帯端末に送信する。
オンライン 出庫実績 ・出庫開始を伝える電文を携帯端末から受信すると, 当該注文について, “出庫”の出庫開始時刻を出庫を開始した時刻に更新する。
・棚及び商品のバーコードの電文を携帯端末から受信すると, 当該商品について, “棚別在庫”, “在庫”を更新し, また“出庫指示”の出庫時刻を棚から出庫した時刻に, “注文明細”の注文状態を出庫済に更新してコミットする。
・商品を梱包した箱のラベルのバーコードの電文を携帯端末から受信すると, “注文明細”の注文状態を梱包済に更新し, コミットする。

注記1: 二重引用符で囲んだ名前は, テーブル名を表す。
注記2: いずれの処理も, ISOLATION レベルは READ COMMITTED で実行する。

〔ピーク日の状況と対策会議〕

注文量が特に増えたピーク日に,朝のバッチ処理が遅延し,出庫作業も遅延する事態が発生した。そこで,関係者が緊急に招集されて会議を開き,次のように情報を収集し,対策を検討した。

1. システム資源の性能に関する基本情報

次の情報から特定のシステム資源に致命的なボトルネックはないと判断した。

(1) ページングは起きておらず, CPU使用率は25%程度であった。
(2) バッファヒット率は95%以上で高く, ストレージの入出力処理能力 (IOPS, 帯域幅) には十分に余裕があった。
(3) ロック待ちによる大きな遅延は起きていなかった。

2. 再編成の要否

アクセスが多かったのは “注文明細” テーブルであった。この1年ほど行の削除は行われず, 再編成も行っていないことから, 時間が掛かる行の削除を行わず, 直ちに再編成だけを行うことが提案されたが, この提案を採用しなかった。なぜならば, 当該テーブルへの行の挿入では予約された空き領域が使われないこと, かつ空き領域の割合が既定値だったことで, 割り当てたストレージが満杯になるリスクがあると考えられたからである。

3. バッチ処理のジョブの多重化

バッチ処理のスループット向上のために, ジョブを注文番号の範囲で分割し, 多重で実行することが提案されたが, デッドロックが起きるリスクがあると考えられた。そこで, どの処理とどの処理との間で, どのテーブルでデッドロックが起きるリスクがあるか, 表3のように整理し, 対策を検討した。

表3 デッドロックが起きるリスク(未完成)
図の説明テキスト

表3 デッドロックが起きるリスク(未完成)

ケース 処理名 処理名 テーブル名 リスクの有無 リスクの有無の判断理由
1 在庫引当 在庫引当 在庫 ある a
2 出庫指示 出庫指示 棚別在庫 ない b
3 在庫引当 出庫指示 注文明細 ない c
注記 ケース 3 は,ジョブの進み具合によって異なる処理のジョブが同時に実行される場合を表す。

4. 出庫作業の遅延原因の分析

出庫作業の現場の声を聞いたところ, 特定の棚にピッカーが集中し, 棚の前で待ちが発生したらしいことが分かった。そこで, 棚の前での待ち時間と棚から商品を取り出す時間の和である出庫間隔時間を分析した。出庫間隔時間は, ピッカーが出庫指示書の1番目の商品を出庫する場合では当該注文の出庫開始時刻からの時間,2番目以降の商品の出庫の場合では一つ前の商品の出庫時刻からの時間である。出庫間隔時間が長かった棚と商品が何かを調べたSQL文の例を表4に,このときの棚と商品の配置,及びピッカーの順路を図2に示す。

表4 SQL文の例(未完成)
図の説明テキスト

表4 SQL文の例(未完成)

SQL文(上段:目的,下段:構文)
ホスト変数hに指定した出庫日について,出庫間隔時間の合計が長かった棚番号と商品コードの組合せを,出庫間隔時間の合計が長い順に調べる。
WITH TEMP(出庫番号,ピッカーID,棚番号,商品コード,出庫時刻,出庫間隔時間) AS
(SELECT A.出庫番号,A.ピッカーID,B.棚番号,B.商品コード,B.出庫時刻,B.出庫時刻 -
COALESCE( LAG(B.出庫時刻) OVER ( PARTITION BY x ORDER BY B.出庫時刻 ),
A.出庫開始時刻 ) AS 出庫間隔時間
FROM 出庫 A JOIN 出庫指示 B ON A.出庫番号 = B.出庫番号 AND 出庫日 = CAST( :h AS DATE) )
SELECT 棚番号,商品コード,SUM(出庫間隔時間) AS 出庫間隔時間合計 FROM TEMP
GROUP BY 棚番号,商品コード ORDER BY 出庫間隔時間合計 DESC

注記 ここでのLAG関数は,ウィンドウ区画内で出庫時刻順に順序付けられた各行に対して,現在行の1行前の出庫時刻を返し,1行前の行がないならば,NULLを返す。

図2 棚と商品の配置,及びピッカーの順路(一部省略)
図の説明テキスト

棚と商品の配置、及びピッカーの順路を示す図。
左端に「商品の梱包及び出荷担当者への受渡し場」がある。その右側に「通路入口」を示す黒丸がある。中央に上段・下段に並んだ棚のブロックがある。
上段の棚: 棚番号「1, 2, 3, 4, 5, 6, ..., 200」、商品コード「S5, S12, S3, S9, S2, S4, S6, ..., S10」
下段の棚: 棚番号「400, 399, ..., ..., 301, ..., 202, 201」、商品コード「S11, S10, ..., ..., S7, S1, ..., S3, S8」
出庫作業の順路は通路入口から出発し、上段の棚に沿って左から右へ進み、右端でUターンして下段の棚に沿って右から左へ進む。
商品の梱包及び受渡し場を通る順路は棚の左端に到達後、商品の梱包及び受渡し場を経由して再び通路入口の方向へ戻るU字型の経路を示す。

表4中のxに,B.出庫番号,A.ピッカーID,B.棚番号のいずれか一つを指定することが考えられた。分析の目的が,特定の棚の前で長い待ちが発生していたことを実証することだった場合,xにあを指定すると,棚の前での待ち時間を含むが,商品の梱包及び出荷担当者への受渡しに掛かった時間が含まれてしまう。いを指定すると,棚の前での待ち時間が含まれないので,分析の目的を達成できない。

分析の結果,棚3番の売行きの良い商品S3(商品コード)の出庫で長い待ちが発生したことが分かった。そこで,出庫作業の順路の方向を変えない条件で,多くのピッカーが同じ棚(ここでは,棚3番)に集中しないように出庫指示を作成する対策が提案された。しかし,この対策を適用すると,表3中のケース2でデッドロックが起きるリスクがあると予想した。

例えば,あるピッカーに,1番目に棚3番の商品S3を出庫し,2番目に棚6番の商品S6を出庫する指示を作成するとき,別のピッカーには,1番目に棚 う の商品 え を出庫し,2番目に棚 お の商品 か を出庫する指示を同時に作成する場合である。

設問と解答・解説

設問1

“2. 再編成の要否”について答えよ。

(1)配点 3点

注文登録処理が“注文明細”テーブルに行を挿入するとき,再編成で予約した空き領域が使われないのはなぜか。行の挿入順に着目し,理由を RDBMSの仕様に基づいて,40字以内で答えよ。

模範解答

主キーが単調に増加する番号なので過去の注文番号の近くに行を挿入しないから

主キーの昇順に行を挿入するとき,表領域の最後のページに格納を続けるから

採点基準

知識・理解度(内容)2点
  • 2点: 挿入順が主キーの昇順であることと、表領域の最後のページに格納を続ける仕様の両方を正確に説明している。
  • 1点: 挿入順または最後のページに格納されることのいずれか一方のみを説明している。
  • 0点: どちらも説明されていないか、誤った内容である。
論理性(構造)1点
  • 1点: 前提と結論が論理的につながっており、簡潔にまとまっている。
  • 0点: 論理的なつながりが不明確である。

解説

RDBMSのB+木インデックスにおいて、主キーが単調増加する場合、新しい行は常にインデックスの右端(最後のページ)に挿入されます。過去のページに予約された空き領域には挿入されないため、再編成で確保した空き領域は利用されません。

高得点のポイント

  • 行の挿入順 が主キーの昇順(単調増加)であることを言及する
  • RDBMSの仕様 として、新規ページ(表領域の最後のページ)に格納され続ける構造を説明する
(2)配点 3点

行の削除を行わず,直ちに再編成だけを行うと,ストレージが満杯になるリスクがあるのはなぜか。前回の再編成の時期及び空き領域の割合に着目し,理由を RDBMSの仕様に基づいて,40字以内で答えよ。

模範解答

再編成後に追加した各ページで既定の空き領域分のページが増えるから

採点基準

知識・理解度(内容)2点
  • 2点: 再編成後に追加された各ページに対しても既定の空き領域が確保され、全体としてページ数が増加することを正確に説明している。
  • 1点: ストレージが増えることには触れているが、空き領域確保によるメカニズムの説明が不十分である。
  • 0点: 説明が誤っているか、言及がない。
論理性(構造)1点
  • 1点: 原因と結果が論理的に正しくつながっている。
  • 0点: 論理的なつながりが不明確である。

解説

前回の再編成以降に行の削除が行われておらずデータが増加している状態です。この状態で再編成を行うと、追加されたすべてのデータページに対して新たに既定の空き領域(例:20%)が確保されるため、再編成前より必要な総ページ数(ストレージ容量)が増加し、満杯になるリスクが生じます。

高得点のポイント

  • 前回の再編成の時期以降に追加されたデータ(ページ) を考慮していること
  • 追加されたページにも 既定の空き領域の割合 が適用され、結果として必要ページ数が増えることを指摘する

設問1では,(1)に比べて(2)の正答率が低かった。再編成を行う場合,空き領域を予約する必要があるとは限らず,緊急時であればあるほど,起こり得るリスクを慎重に予測することを心掛けてほしい。

設問2

“3. バッチ処理のジョブの多重化”について答えよ。

(1)配点 3点

表3中の a に入れる適切な理由を,30字以内で答えよ。ここで,在庫は適正に管理され,欠品はないものとする。

模範解答

異なる商品の“在庫”を逆順で更新することがあり得るから

採点基準

知識・理解度(内容)2点
  • 2点: 異なる商品の在庫行に対して、アクセス順序が逆転(逆順で更新)する可能性を的確に指摘している。
  • 1点: アクセス順序の違いには言及しているが、具体的な対象(在庫テーブル)や逆転することへの言及が不足している。
  • 0点: 的確な理由が説明されていない。
論理性(構造)1点
  • 1点: ロック競合とデッドロックの原因として論理的に成立している。
  • 0点: 理由として成立していない。

解説

複数のジョブが実行される際、商品コードの順で処理するジョブと、注文明細番号の順(商品コード順とは異なる順)で処理するジョブが混在すると、同じ商品の 在庫 テーブル行に対して 逆順 でロックを獲得しにいく可能性があり、これがデッドロックの原因となります。

高得点のポイント

  • 異なる商品の 在庫行 に対してアクセス順序が逆になる(逆順で更新される)可能性を指摘する
(2)配点 3点

表3中の b に入れる適切な理由を,30字以内で答えよ。ここで,在庫は適正に管理され,欠品はないものとする。

模範解答

“棚別在庫”を常に主キーの順で更新しているから

採点基準

知識・理解度(内容)2点
  • 2点: 棚別在庫を常に主キーの順(同じ順序)で更新していることを明記している。
  • 1点: 更新順序が一定であることには言及しているが、対象テーブル(棚別在庫)が不明確である。
  • 0点: デッドロックが起きない理由として不適切である。
論理性(構造)1点
  • 1点: 文字数制限内で端的に要点が説明されている。
  • 0点: 表現が不明瞭である。

解説

出庫指示処理では、対象となる 棚別在庫 テーブルの行を常に 主キーの順 にアクセス・更新しています。すべてのジョブが同じ順序でロックを獲得するため、循環待ちが発生せずデッドロックを回避できます。

高得点のポイント

  • 棚別在庫 テーブルを更新対象としていること
  • 常に 主キーの順(同じ順序)で更新していることを明記する
(3)配点 3点

表3中の c に入れる適切な理由を,30字以内で答えよ。ここで,在庫は適正に管理され,欠品はないものとする。

模範解答

異なるジョブが同じ注文の明細行を更新することはないから

採点基準

知識・理解度(内容)2点
  • 2点: 異なるジョブが同じ注文の明細行にアクセス(更新)することがないことを明記している。
  • 1点: 競合が起きない旨は記載されているが、同じ注文データへのアクセスの観点が不足している。
  • 0点: 理由として不適切である。
論理性(構造)1点
  • 1点: リソースの分離が競合回避につながる理由として論理的である。
  • 0点: 論理性が欠如している。

解説

バッチジョブを注文番号の範囲で分割して実行するため、複数のジョブが 同じ注文 のデータ(注文明細行)に同時にアクセスすることはありません。リソースが完全に分離されるため、ロック競合やデッドロックのリスクがなくなります。

高得点のポイント

  • ジョブ間で 同じ注文の明細行 を更新する競合が発生しないことを説明する
(4)配点 3点

表3中のケース1のリスクを回避するために,注文登録処理又は在庫引当処理のいずれかのプログラムを変更したい。どちらかの処理を選び,選んだ処理の処理名を答え,プログラムの変更内容を具体的に 30字以内で答えよ。ただし,コミット単位と ISOLATIONレベルを変更しないこと。

模範解答

注文登録: “注文明細”に行を商品コードの順に登録する。

注文登録: 商品コードの順に注文明細番号を付与する。

在庫引当: “在庫”の行を商品コードの順に更新する。

採点基準

知識・理解度(内容)2点
  • 2点: 処理名(注文登録または在庫引当)が適切であり、商品コードの順に登録・更新する変更が具体的に記述されている。
  • 1点: 処理名は適切だが、プログラムの変更内容の具体性がやや不足している。
  • 0点: 処理名と変更内容が不適切である。
論理性(構造)1点
  • 1点: デッドロック回避策として論理的に妥当である。
  • 0点: 妥当性に欠ける。

解説

デッドロックを回避するための原則は、複数のトランザクションでリソースにアクセスする 順序を統一 することです。ケース1の競合を解消するためには、注文登録 処理において「注文明細に行を商品コード順に登録する」か、在庫引当 処理において「在庫の行を商品コード順に更新する」ことで、アクセス順序の逆転を防ぎます。

高得点のポイント

  • 選択した処理名が正しいこと
  • 更新・登録順序を 商品コードの順 に統一する変更内容が具体的に記述されていること

設問2では,(1)cの正答率が低かった。バッチジョブの多重化は,スループットを向上させる常とう手段であるが,更新処理を伴う場合,ロック競合のリスクがある。しかし,ジョブを注文番号の範囲で分割し,多重で実行することに着目すれば,注文番号が異なる“注文明細”テーブルの行でジョブ同士がロック競合を起こすことはないと分かるはずである。マスター・在庫領域のテーブルとトランザクション系のテーブルとでは,ロック競合のリスクに違いがあることをよく理解してほしい。

設問3

“4. 出庫作業の遅延原因の分析”について答えよ。

(1)配点 5点

本文中の あ に入れる適切な字句を答えよ。

模範解答

A.ピッカーID

採点基準

正確性(内容)5点
  • 5点: 「A.ピッカーID」と完全に一致している。
  • 2点: 「ピッカーID」のみなど、部分的な記述であるが意味は通じる。
  • 0点: 不正解である。

解説

ウィンドウ関数の PARTITION BY 句における分割(ウィンドウ区画)の基準を問う問題です。時系列データを適切に分析するためには、分析対象単位でパーティションを切り、出庫時刻を並べ替える必要があります。ここでは、ピッカーごとの作業履歴を分析するため、パーティションを ピッカーID とします。

高得点のポイント

  • 本文の字句「A.ピッカーID」を正確に抜き出せていること
(2)配点 5点

本文中の い に入れる適切な字句を答えよ。

模範解答

B.棚番号

採点基準

正確性(内容)5点
  • 5点: 「B.棚番号」と完全に一致している。
  • 2点: 「棚番号」のみなど、部分的な記述であるが意味は通じる。
  • 0点: 不正解である。

解説

同様にウィンドウ関数の区画基準を問う問題です。棚ごとの出庫状況やピッカーの移動履歴を分析するためには、対象を 棚番号 で分割(パーティション)し、分析を行う必要があります。

高得点のポイント

  • 本文の字句「B.棚番号」を正確に抜き出せていること
(3)配点 5点

本文中の う に入れる適切な字句を答えよ。

模範解答

6番

採点基準

正確性(内容)5点
  • 5点: 「6番」と完全に一致している。
  • 2点: 「6」のみなど、部分的な記述であるが意味は通じる。
  • 0点: 不正解である。

解説

図や表から分析対象となる具体的な値を読み取る問題です。特定のピッカーがどの出庫作業で遅延したかを特定するために、該当の出庫番号 6番 を導き出します。

高得点のポイント

  • 本文の字句「6番」を正確に抜き出せていること
(4)配点 5点

本文中の え に入れる適切な字句を答えよ。

模範解答

S6

採点基準

正確性(内容)5点
  • 5点: 「S6」と完全に一致している。
  • 2点: 大文字小文字の揺れなどがあるが、意味は通じる。
  • 0点: 不正解である。

解説

遅延が発生した具体的な作業場所(棚)を特定します。表のデータ推移から、渋滞や作業待ちが発生している棚番号 S6 を見極めます。

高得点のポイント

  • 本文の字句「S6」を正確に抜き出せていること
(5)配点 5点

本文中の お に入れる適切な字句を答えよ。

模範解答

3番

採点基準

正確性(内容)5点
  • 5点: 「3番」と完全に一致している。
  • 2点: 「3」のみなど、部分的な記述であるが意味は通じる。
  • 0点: 不正解である。

解説

出庫作業において、並行して行われた別作業との関連を問う問題です。分析結果から、他のピッカーが担当した出庫番号 3番 の作業が影響していることを特定します。

高得点のポイント

  • 本文の字句「3番」を正確に抜き出せていること
(6)配点 5点

本文中の か に入れる適切な字句を答えよ。

模範解答

S3

採点基準

正確性(内容)5点
  • 5点: 「S3」と完全に一致している。
  • 2点: 大文字小文字の揺れなどがあるが、意味は通じる。
  • 0点: 不正解である。

解説

同様に、競合や遅延の原因となった棚番号を特定します。対象となる棚は S3 です。

高得点のポイント

  • 本文の字句「S3」を正確に抜き出せていること
(7)配点 2点

下線の対策を適用した場合,表3中のケース2で起きると予想したデッドロックを回避するために,出庫指示処理のプログラムをどのように変更すべきか。具体的に 40字以内で答えよ。ただし,コミット単位と ISOLATIONレベルを変更しないこと。

模範解答

“出庫指示”の読込み順を出庫番号,商品コード,棚番号の順に変更する。

“棚別在庫”の行を商品コード,棚番号の順に更新する。

採点基準

知識・理解度(内容)1点
  • 1点: 出庫指示の読込み順、または棚別在庫の更新順を、商品コードや棚番号の順に変更する旨が正しく記述されている。
  • 0点: 記述が不適切である。
論理性(構造)1点
  • 1点: 対象となる処理と変更内容のつながりが明確である。
  • 0点: 変更対象が曖昧である。

解説

ウィンドウ関数を用いた対策によって処理順序が変更された結果、新たなデッドロックのリスク(ケース2)が発生します。これを回避するためには、アクセス順序を再度統一する必要があります。具体的には、出庫指示 の読込み順を「出庫番号、商品コード、棚番号の順」に変更する、あるいは 棚別在庫 の更新を「商品コード、棚番号の順」に統一することで、デッドロックを防ぎます。

高得点のポイント

  • 読込み順または更新順序を変更することを明記する
  • 順序の基準として 商品コード、棚番号 などのキーを含める

設問3では,(1)あ,いの正答率が低かった。ウィンドウ区画のB.出庫番号,A.ピッカーID,又はB.棚番号のそれぞれについて,どのような並びの出庫時刻が得られるかを考えることで,正答を得ることができる。ウィンドウ関数は,時系列データを多角的かつ柔軟に分析するのに役立つので,是非,習得してほしい。

Spineチーム