DBデータベーススペシャリスト試験 午後Ⅰ
平成27年度春期 データベーススペシャリスト 午後Ⅰ 問3
事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。
問題






解き方のヒントを見る
前提条件を整理してから設問に向き合う
処理方式を扱う問題では、結論を急ぐ前に、問題中で示された前提や条件を自分の言葉で書き出すことが有効です。どの条件がどの問いに関係するかを対応づけ、根拠となる記述を確かめながら考えを進めましょう。
この問題で問われていること
確認すべき観点は一つで、問題中に示された前提条件を漏れなく把握できているかどうかです。数値や単位、適用範囲などの記述を先に整理し、それぞれの問いがどの条件に依存しているかを確かめてください。
視点
設計や見積りを問う問題では、一般論の知識だけで判断すると、問題固有の条件を見落としやすくなります。まず問題中で明示されている条件を書き出し、次に各問いがどの条件を前提にしているかを結び付けると、判断の根拠が明確になります。知識は、整理した条件に照らして使うものと位置づけるとよいでしょう。
確認ポイント
- 問題中に明示された条件(数値・単位・範囲など)を書き出して整理したか
- 各問いがどの条件を前提にしているかを対応づけたか
- 自分の判断が一般論ではなく問題中の記述に基づいているか確かめたか
正解と解説を見る
解説
クレジットカード会社の売上登録バッチを題材に、表2の統計情報から行数とページ数を見積もる力を問う問題です。あわせて、多重処理で起きるデッドロックの原因、ソート順の変更で読込みがランダムから順次に変わる効果、チェックポイントリスタート機能のテーブル設計と同期位置、冗長な述語、コミット間隔Nの見積り式が問われています。
問題の全体像
E社では毎月末、ジョブ1が売上明細ファイルを“売上明細”テーブルに追加します。ジョブ2はそれを1行ずつ読み、“利用残高”テーブルを更新して“利用明細”テーブルに行を追加します。現行のジョブ2には次の問題があります。1多重でしか動かせない、最後に1回しか同期を取らない、失敗時のロールバックが長くなる、入金トランザクションのロック待ちが長くなる。そこでFさんは、ソート順をカード番号、利用年月日の順に変え、N行ごとに同期を取るチェックポイントリスタート(C/R)機能を追加しました。出題趣旨では、アクセスパスで決まる読込み順序を予測して性能を見積もる力と、多重処理や途中再開を実現するテーブルとSQLを設計する力を問うとしています。
設問1(1)(ア)
表2の統計情報は、ジョブ3の終了直後、つまり直近10か月分だけが“売上明細”に残っている状態の値です。“売上明細”のカード番号の列値個数は2、000、000なので、10か月間に使われたカードは2、000、000枚になります。公式解答例も2、000、000です。“利用残高”のカード番号5、000、000は発行済みのカード全体の数なので、取り違えないようにしましょう。
設問1(1)(イ)
“売上明細”の行数は売上明細連番の列値個数で200、000、000行です。10か月分なので、1か月当たり20、000、000行になります。設問には、月ごとに使われるカード番号に偏りはないという条件があります。そのため毎月2、000、000枚全てが使われると考え、20、000、000÷2、000、000=10件になります。公式解答例も10です。
設問1(1)(ウ)
ジョブ2は当月の登録年月の行だけを処理します。200、000、000行÷10か月=20、000、000行なので、公式解答例は20、000、000です。
設問1(1)(エ)
ページと行は追加された順に並ぶので、当月分の行は連続したページに入っています。副次索引(登録年月)で順次に読めば、1ページに20行ずつまとめて読めます。20、000、000行÷20行=1、000、000ページとなり、公式解答例も1、000、000です。
設問1(1)(オ)
現行のソート順は加盟店コード、利用年月日です。そのため、カード番号の順に並んでいる“利用残高”へのアクセスは順不同(ランダム)になります。設問の前提では、次にアクセスするページはバッファにありません。したがって1行更新するたびに1ページ読むことになり、延べ最大20、000、000ページになります。公式解答例も20、000、000です。採点講評では、オの正答率が低かったとし、バッファヒットしないランダムアクセスでは1行ごとに1ページを読む必要があると指摘しています。
設問1(1)(カ)
多重処理で更新が衝突するのは、どのジョブもUPDATEで更新する“利用残高”テーブルです。“売上明細”は読むだけで、“利用明細”には追加するだけなので、行ロックが競合しません。公式解答例は“利用残高”です。
設問1(1)(キ)
ジョブ2は最後に1回しか同期を取りません。途中で失敗すると、それまでの大量の更新をRDBMSが全て取り消すことになります。処理量が増えるほど取り消しの時間も長くなります。公式解答例は「ロールバック」または「アボート」です。採点講評では、設問2はこのロールバック時間の問題を解決する設計を問うものであり、キを正しく答えていながら設問2を正しく解答できていない受験者がいたのは惜しまれる、と述べています。
設問1(2)
各ジョブは重複しない売上明細連番の範囲を担当しますが、行は加盟店コード順に並んでいます。そのため、同じカード番号の売上が複数のジョブの範囲にばらばらの順序で含まれます。例えばジョブXがカードP→Qの順に、ジョブYがQ→Pの順に“利用残高”の行をロックすると、互いに相手のロック解除を待つ状態になります。公式解答例は「同じカード番号の行を異なる順番で更新するから」です。30字以内の答案では、列名「カード番号」と「更新順序が異なる」ことの二つを入れます。
設問1(3)(ページ数)
変更後はソート順がカード番号、利用年月日になり、“売上明細”の当月分もカード番号の順に並びます。“利用残高”もカード番号の順に格納されているので、読込みは先頭から末尾に向かって一方向に進み、同じページを読み直すことはありません。多く見積もっても“利用残高”の全ページ数、つまり5、000、000行÷10行=500、000ページになります。公式解答例も500、000です。
設問1(3)(理由)
公式解答例は「ページの読み込みがランダムから順次に変わったから」です。答案では、アクセスの仕方がランダムから順次に変わったこと(その結果、1ページ内の複数行をまとめて処理できること)を書きます。採点講評では、「カード番号、利用年月日順に読み込んだから」のようにソート順の列名を書いただけの解答は、問題文の読み替えにすぎず正しい解答にならないと注意しています。
設問2(1)
図3を見ると、CKPTテーブルの使い方は次のとおりです。②で「WHERE ジョブID = :ジョブID」によりCKPT連番を1行取得する。②-1でジョブIDだけをINSERTする。⑥でジョブIDを条件にCKPT連番をUPDATEする。⑨でジョブIDを条件にDELETEする。1ジョブにつき1行で、ジョブIDで行を一意に特定できます。公式解答例は「CKPT(ジョブID,CKPT連番)」で、主キー(下線)はジョブIDです。
設問2(2)
(N×K+1)行目から正しく再開するには、N行分の更新と、その最後の売上明細連番をCKPT連番に記録する更新とを、同じ時点で確定させる必要があります。⑥でCKPTテーブルを更新した直後にCOMMITすれば、処理済みの位置と実際の更新内容が一致します。カーソルはWITH HOLDなので、COMMITの後も処理を続けられます。公式解答例は⑥です。
設問2(3)(述語)
公式解答例は「登録年月 = :登録年月」です。採点講評では、ORDER BY句は述語ではないこと、また多重処理を前提にしているので担当範囲を指定するBETWEEN述語は必要であることを指摘しています。問題の前提をよく読んでいないと思われるこうした誤答が散見されたとしています。
設問2(3)(理由)
売上明細連番は、行が追加されたときに一意かつ昇順で付与されます。そのため、ホスト変数で当月分の連番範囲を適切に与えれば、その範囲の行の登録年月は自動的に当月に決まります。公式解答例には、「売上明細連番に対するBETWEEN述語で代替できるから」「売上明細連番が決まれば登録年月は一意に決まるから」「登録年月は利用明細連番に従属しているから」の三つが挙げられています。30字以内の答案では、連番の範囲指定で登録年月の条件を代替できる、つまり連番から登録年月が決まるという要素を書きます。
設問2(4)(a)
1回の同期区間では、次の処理を行う間ずっと“利用残高”の行を排他ロックし続けます。④⑤をN回(N×A秒)、⑥を1回(B秒)、同期を1回(C秒)です。この合計がタイムアウト時間Tを超えなければ、他のトランザクションはタイムアウトしません。採点講評でも、T>N×A+B+Cの式を満たす必要があると分かれば解答を導けるとしています。Nについて変形すると、N<(T−B−C)/Aとなり、分子aは公式解答例のとおりT−B−Cです。
設問2(4)(b)
同じ変形で、Nに掛かっている係数、つまり1行当たりの④⑤の処理時間Aが分母になります。公式解答例はAです。
学習のポイント
統計情報を使ったページ数の見積り(順次読込みとランダム読込みの違い)を練習しましょう。更新順序とデッドロックの関係、COMMITの間隔とロールバック時間・ロック待ちの関係、そしてC/R機能で記録と同期を同じトランザクションにまとめる設計も重点です。
出典:独立行政法人 情報処理推進機構(IPA)平成27年度春期 データベーススペシャリスト試験 午後Ⅰ 問3(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針