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












解き方のヒントを見る
性能改善を考えるための観察軸
物理設計や性能改善を検討するときは、まず処理のどこに負荷が現れているかを観測し、変更の目的と影響範囲を対応づけます。単一の手段に決めつけず、利用状況や運用上の制約も含めて比較してください。
この問題で問われていること
焦点は、見えている遅さを印象だけで判断せず、対象となる処理、発生条件、観測結果、変更後に確かめる指標を一つの流れで整理できるかです。改善の前後を同じ条件で見比べる視点を持ちましょう。
視点
性能は構造だけでなく、処理内容、データ量、利用頻度、同時実行、更新や保守の条件などの組合せで変わります。候補を考える際は、観測事実と仮説を分け、期待する効果と副作用を同じ基準で整理します。
確認ポイント
- 遅さを感じた処理と、その発生条件を同じ対象として整理できているか
- 変更の狙いと、影響を受ける範囲を分けて書けているか
- 変更前後を比較するための観測方法と判断基準を決めているか
正解と解説を見る
解説
販売管理システムの業務要件とRDBMS仕様を読み取り、表領域の容量見積り、ディスク配置、索引追加、ロック競合、デッドロック、パーティション検索を一貫して考える問題です。
問題の全体像
A社の販売管理システムを題材に、受注から入金確認までの業務と、テーブル構造・表領域・ディスク装置・索引・パーティション化を関連付けて問う。設問1は容量見積りと信頼性・入出力を考慮した配置、設問2は検索性能とブロック単位のロック、設問3は業務ごとの検索条件に適したパーティション設計が中心です。公式解答例と採点講評からは、単に用語を答えるのではなく、問題文の業務ルールとRDBMS仕様を具体的な処理へ落とし込むことが重視されている。
設問1(ア)
③では、ブロックサイズからヘッダ部と空き領域部を除いた、1ブロックに実際にデータを格納できる長さが得られる。これを平均行長で割るため、求めるのは1ブロックに格納できる行数の上限です。公式解答例では「1ブロック内の最大行数」としている。
設問1(イ)
⑤では、必要な行数を1ブロック当たりの最大行数で割って、必要ブロック数を求める流れになる。したがって【イ】は、②で表5から得た「見積行数」です。
設問1(ウ)
⑤の割る数は、④で求めた1ブロック内の最大行数です。したがって【ウ】は「④の結果」となる。平均行長そのものではなく、ブロック当たりに格納できる行数を使う点に注意する。
設問1(エ)
見積行数を1ブロック内の最大行数で割ると、表全体に必要なブロック数が得られる。⑤の結果にブロックサイズを掛けて表領域の容量を出すため、【エ】は「必要ブロック数」です。
設問1(2)
在庫TSは平均行長190バイト、見積行数900、000、ブロックサイズ4、096バイトです。空き領域は(4、096−96)×0.1=400バイト、データ部は3、600バイトとなる。1ブロックの最大行数は3、600÷190の整数部分で18行、必要ブロック数は900、000÷18=50、000ブロックです。よって所要量は50、000×4、096=204、800、000バイトとなる。
設問1(3)(i)
出荷指示などでは、受注・受注明細・出荷・出荷明細の複数テーブルを同時に参照・更新する。これらをHDD4とHDD5へ分散すれば、同時処理で同じディスクに入出力が集中することを避けられる。公式解答例では、この入出力競合の回避を75字以内で説明している。
設問1(3)(ii)
HDD2は信頼性が低いが、そこに置くのは索引用の表領域です。問題文ではすべての索引を削除して再作成できるため、索引が障害で失われても再作成によって復旧できる。公式解答例の要点は「索引は再作成によって復旧できるから」です。
設問2(1)
商品別返品件数表は事業所別に作成するが、出荷表には事業所コードがない。公式解答例では「出荷」テーブルに「事業所コード」を追加する。受注担当社員番号と受注年月日から所属表を参照して受注時点の事業所コードを求める処理を、出荷時に保持した列で省略できるため、検索効率が上がると説明する。答案はテーブル名・列名・参照処理の削減を60字以内に収める。
設問2(2)
受注金額推移表は顧客別・月別・商品別の集計を一つのSQL文で行う。公式解答例では「受注」テーブルに「受注年月」を追加し、顧客番号・受注年月・商品コードでグループ化する。月を受注年月から直接扱えるようにし、集計条件を一つのSQL文にまとめる点を書く。
設問2(3)
受注処理では顧客テーブルを更新する一方、RDBMSは行そのものではなく、その行を含むブロックをロックする。顧客テーブルは1ブロック内の行数が多いため、ある顧客の更新でも同じブロック内の多くの行がロック対象となり、他の受注処理の待ちが増える。公式解答例の「1ブロック内の行数が多く、更新の都度ロックされる対象行が多くなる」という要点を押さえる。
設問2(4)
該当するのは③の受注と返品です。両処理は在庫テーブルの複数行を更新する可能性があり、処理ごとに異なる順序で行を更新すると、一方が保持するロックを他方が待ち、相互待ちになる。単に同じテーブルを使うだけでなく、複数行を異なる順序で更新することがデッドロックの具体的原因です。
設問3(a)
案Aは事業所コードでパーティションを分けている。月締めは事業所ごとに行い、対象月中に納品済みの請求を処理するため、当該事業所の一つのパーティションを特定できる。そのパーティション内で請求対象年月のローカル索引を使って検索する、と述べる。
設問3(b)
案Bは請求対象年月でパーティションを分けている。未収金集計表は全事業所の過去1年以内の請求を顧客ごとに集計するため、過去1年以内の対象年月のパーティションを絞り込めるが、各パーティション内で事業所コードや顧客番号による絞込みは不要です。公式解答例では、その範囲を全件検索するとしている。
設問3(c)
案Cは顧客番号の値の範囲でパーティションを分けている。入金確認では振込人欄の顧客番号が分かるため、当該顧客番号を含む一つのパーティションを特定できる。その後、事業所コードのローカル索引で対象事業所の請求を検索する、という順序を説明する。
学習のポイント
業務処理の更新対象とRDBMSの物理・排他・索引仕様を結び付けて説明する力を養う。
出典:独立行政法人 情報処理推進機構(IPA)平成22年度春期 データベーススペシャリスト試験 午後Ⅱ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針