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


















解き方のヒントを見る
条件差と結果差を対応付ける
性能に関する設問では、結果の数値だけを見て原因を決めつけず、比較されている条件のどこが異なり、その違いが処理のどの段階に影響し得るかを一つずつ対応付けて考えることが、根拠のある判断につながります。
この問題で問われていること
確認したい観点は一つです。記述された構成・データ・処理内容のうち、比較対象の間で何が同じで何が違うのかを整理し、その違いと観測された結果の差が論理的に結び付くかどうかを、本文の記述を根拠に確かめてください。
視点
複数の要素が関わる性能の検討では、結果の差を説明する要因の候補がいくつも考えられます。まず比較対象の間で変わっていない前提を押さえ、そのうえで変わった条件を洗い出します。次に、その条件が処理の流れのどこで効き得るかを本文の記述に沿って確かめます。一般論として成り立ちそうに見えるだけの説明と、本文の記述から裏付けられる説明とを区別することが大切です。
確認ポイント
- 比較されている対象の間で、共通している前提と異なっている条件をそれぞれ本文から拾い出せているか
- 異なっている条件が、処理の流れのどの部分に影響し得るのかを本文の記述に沿って説明できるか
- 自分が考えた要因が、一般論だけに頼らず本文中の具体的な記述によって裏付けられているか
正解と解説を見る
解説
大量の時系列データを扱う節電支援システムを題材にした問題です。①索引の構成列の順序、②索引探索で読み込むページ数の見積りと、集計テーブル追加による改善、③CROSS JOIN・RANK・NTILE を使った問合せ、④縮小したテスト環境の妥当性と、性能テストで実測値が見積りと食い違った原因の分析が問われています。いずれも、本文中の RDBMS の仕様(索引探索の条件、ページ長、クラスタ率、LRU 方式のバッファ共有)を数値に当てはめて考えます。
問題の全体像
J社は、コントローラから分単位で送られてくる買電・発電・使用電力・機器ログを蓄積し、使用電力量表示画面(図1)や統計分析を提供するシステムを構築しています。データベースは20ノードのシェアードナッシング型クラスタで、機器ログ・買電・発電・使用電力の各テーブルは住居番号を分散キーにしてノードに分散配置します。出題趣旨によれば、この問題で問われるのは、物理データモデルの設計、適切な索引の設計と評価、テストの計画と実施、処理性能の基礎数値に基づく妥当性評価の4つです。設問1は索引と読込みページ数の見積り・改善、設問2は処理3・処理4の SQL、設問3は性能テストのデータ作成と、結果が見積りと食い違った原因の分析です。採点講評では、問1全体の正答率は低く、特に設問1(2)と設問3が低かったと述べられています。
設問1(1)
処理2の比較対象住居は「同じ地域」「同じ世帯区分」「同じ地域かつ同じ世帯区分」の3通りです。RDBMS の仕様(6)により、索引探索が選ばれるのは、等値条件の列が索引キーの全体、または先頭から連続する列に一致する場合だけです。一方、地域コードは住居テーブルの外部キーなので、方針(5)によってすでに地域コード単独の索引があります。そのため新しく定義する索引は、先頭を世帯区分、2番目を地域コードにすれば足ります。こうすると「世帯区分だけ」は先頭列で、「世帯区分と地域コード」は索引キー全体で、それぞれ索引の中で絞り込めます。公式解答例でも「世帯区分,地域コード」の順です。採点講評では、構成列の定義順を考慮しない解答が散見されたと指摘されています。順序まで含めて答える必要があります。
設問1(2)(①)
a・b・c:最小読込みページ数は、クラスタ率が最も高く、対象行が連続したページに詰まっている場合の値なので「探索行数÷ページ当たり平均行数」の切上げになります。最大読込みページ数は、クラスタ率が最も低く、1行ごとに別のページを読む場合の値なので、探索行数と一致します。公式解答例でも、a が探索行数、b がページ当たり平均行数、c が探索行数です。
d:使用電力テーブルの主キー索引は(住居番号,回路番号,年月日,時,分)です。照会では回路番号を指定しないため、索引探索に使える等値条件は先頭列の住居番号だけです。したがって、その住居の全期間の行をすべて探索します。探索行数は「1日500件×360日×3年=540、000行」で、表5の54、000、000、000行÷100、000住居とも一致します。公式解答例の d も 540、000(行)です。同じ考え方で、表9の発電の探索行数43、200も、発電テーブルの住居当たり全行数(4、320、000、000÷100、000)になっています。
e:ページ当たり平均行数は 2、000×(1-0.1)÷20=90行です。最小読込みページ数は 540、000÷90=6、000 ページになります。
f:最大読込みページ数は探索行数と同じ 540、000 ページです。公式解答例も e=6、000、f=540、000 です。この結果、平均読込みページ数は (6、000+540、000)×50%=273、000 ページとなり、対策が必要だと判断されます。
設問1(2)(②)
図1のグラフは、日ごとの買電・発電・使用電力の電力量を表示します。追加するテーブルは、分単位の明細を日単位に集計したものにすれば、照会で読む行数を大幅に減らせます。設問の指示どおり、買電・発電・使用電力を「電力区分」列で区別すれば、1つのテーブルにまとめられます。公式解答例は「日別計(住居番号,年月日,電力区分,電力量)」で、主キーは住居番号・年月日・電力区分(実線の下線)です。住居番号を先頭にしているので、指定住居の等値条件で索引探索ができます。回路番号は住居単位の集計に不要なため含めていません。前日までの集計行は夜間バッチで追加するという本文の対策とも整合します。
設問1(2)(③)
日別計の平均行長は、住居番号 INTEGER 4バイト+年月日 DATE 4バイト+電力区分 CHAR(1) 1バイト+電力量 DECIMAL(10、3) 6バイト=15バイトです(すべて NOT NULL の想定でフラグなし)。ページ当たり平均行数は 2、000×0.9÷15=120行になります。
照会は2020年3月25日に2019年4月を指定しているので、当日分は含まれず、すべて日別計から読みます。探索行数は次の合計です。
・当月(2019年4月、30日分)の買電・発電・使用電力:30日×3区分=90行
・比較対象(2018年4月)の使用電力:30日×1区分=30行
合計は120行です(1年360日の前提で1か月=30日)。
したがって、最小読込みページ数は 120÷120=1、最大読込みページ数は探索行数と同じ120になります。公式解答例も最小1、最大120です。平均読込みページ数は (1+120)×50%=60.5 を切り上げて61となり、目標の100以下を満たすことも確認できます。
設問2(1)(g)
表10の W1 の③に「①と②の結果の直積」とあります。直積を求める結合は CROSS JOIN なので、g には CROSS が入ります。距離の条件は WHERE 句で指定しています。公式解答例も CROSS です。
設問2(1)(h)
W2 のランクは「距離を昇順に並べた順位」です。RANK() の ORDER BY には W1 で求めた列の「距離」を指定します。対象は指定された1住居・1時点だけなので、PARTITION BY は不要です。公式解答例も「距離」です。
設問2(1)(i)
W3 では、ランクが2以下の地点の標準発電量の平均を「平均標準発電量」として求めます。最後の SELECT で A.平均標準発電量 と参照しているので、別名が必要です。公式解答例は「AVG(標準発電量) AS 平均標準発電量」です。
設問2(1)(j)
j は W3 と W4 の両方で使われています。どちらも「住居番号,年月日,時ごと」の集約(W3 は平均、W4 は合計)なので、集約関数と並べて選択している列でグループ化します。公式解答例は「GROUP BY 住居番号,年月日,時」です。
設問2(1)(k)
発電テーブルには、回路番号ごと・分ごとの行が1時間に複数あります。W4 の時間発電量は「住居番号,年月日,時ごとの発電量の合計」なので、SUM で集計し、最後の SELECT で参照する別名を付けます。公式解答例は「SUM(発電量) AS 時間発電量」です。
設問2(2)(l)
W1 は地域コードごとに集計しますが、使用電力テーブルには地域コードがありません。そのため、①で選択した使用電力の行を住居テーブルと住居番号で結合し、住居の地域コードを得る必要があります。図4でも B.地域コード を参照しています。公式解答例は「①の結果と住居を住居番号で内結合」です。
設問2(2)(m)
図4の W3 は「AVG(合計使用電力量) AS 平均使用電力量 … GROUP BY 地域コード,階級番号」です。これを表11の「項目名=[演算の概要]」の形式で書きます。公式解答例は「平均使用電力量=[地域コード,階級番号ごとの合計使用電力量の平均]」です。
設問2(2)(n)
最後の問合せでは、W3 の結果全体に地域名を付けて出力します。W3 に対する選択条件はありません。表10の最終行「W3の全行を選択」と同じ書き方で、公式解答例も「W3の全行を選択」です。
設問2(2)(o)
出力項目の地域名は地域テーブルにあるため、①の結果(W3)と地域テーブルを地域コードで結合します。公式解答例は「①の結果と地域を地域コードで内結合」です。
設問2(2)(p)
処理4は、地域ごとに合計使用電力量の大きい方から順序付けし、5階級に分けます。表4の NTILE の構文に当てはめると、区画化列は PARTITION BY 地域コード、階級化列は ORDER BY 合計使用電力量 DESC(大きい順なので降順)です。公式解答例は「PARTITION BY 地域コード ORDER BY 合計使用電力量 DESC」です。採点講評では、ウィンドウ関数の構文を正しく理解していない解答が散見されたと指摘されています。DESC の付け忘れや句の順序に注意してください。
設問3(1)(①)
着目点は、分散テーブルの分散キーが住居番号であることです。本番は住居100、000件を20ノードに分散するので、1ノード当たり約5、000住居分です。テストは10、000件を2ノードに分散するので、同じく1ノード当たり約5、000住居分になります。DBサーバの仕様も本番と同じで、クラスタ全体の TPS はノード数に比例することが確認済みです。したがって、1ノード分の性能から本番の性能を推測できます。公式解答例の要旨は「分散するテーブルは住居番号が分散キーであり、ノード当たりの行数とDBサーバの仕様が同じだから」です。50字以内では「分散キー=住居番号」「ノード当たり行数が同じ」「サーバ仕様が同じ」を入れるのが基本です。
設問3(1)(②)
本番では地域1、000件・住居100、000件なので、1地域当たり平均100住居です。テストでは住居を10分の1にしているため、何も考えずに地域コードを割り振ると1地域当たり約10住居となります。その結果、地域単位で比較・集計する処理2や処理4の対象行数が本番と大きく変わってしまいます。公式解答例には「地域当たりの住居数が実データに近い比率で分散するように値を設定する」と「1地域当たりの住居数が100となるように値を設定する」の2つが箇条書きで併記されています。両方を書く必要があるのか、どちらか一方でよいのかは公式資料からは判断できないため、ここでは断定しません。両者に共通するのは、地域当たりの住居数を本番相当にし、性能テストの結果を本番に近づけるという観点です。採点講評では、性能テストの実施を考慮した解答が期待されていたのに、システム機能の観点での解答が散見されたと述べられています。参照整合性など機能面ではなく、性能に影響するデータ分布の観点で具体的に書くことが大切です。
設問3(2)(差異1)
表13では、機器ログを「住居番号,年月日順に」追加しています。処理5は住居番号と年月日を指定して機器ログを読むので、主キー索引の順序と行の物理的な並びがほぼ一致し(クラスタ率が高い)、少ないページで必要な行を読めます。そのためバッファヒット率が上がり、応答時間が見積りを大きく下回りました。本番では多数の住居のログが時刻順に混ざって追加されるため、このような並びにはなりません。公式解答例の要旨は「“機器ログ”テーブルは、住居番号、年月日順に行を追加したことで、クラスタ率が高くなったこと」です。採点講評では、バッファヒット率に言及しただけの解答が多かったと指摘されています。原因として、データの投入順とクラスタ率を書くことが求められます。
設問3(2)(差異2)
図5で①と②の時間帯を見ると、処理3と処理2が同時に実行されています。処理2は1トランザクション当たり5、000ページを読み、バッファヒット率は40%と低い処理です。これを50~100の多重度で実行すると、バッファの480、000ページ分を大きく圧迫します。同じページ長のテーブルは1つのバッファを共有し、置換えは LRU 方式なので、処理3が参照するページが追い出され、処理3のヒット率が見積りの90%を下回ったと考えられます。公式解答例の要旨は「処理2の実行によって、同時に実行される処理3が参照するページがバッファから追い出されたこと」です。採点講評では、処理が並走している点だけに言及した解答が目立ったと指摘されています。処理2の特性(大量ページの読込み)と、RDBMS の仕組み(共有バッファ・LRU による追い出し)まで結び付けて書くことが求められます。
学習のポイント
特に次の3点を押さえてください。(1) 索引探索に使える条件は、索引キーの先頭から連続する列に対する等値比較に限られること。(2) 読込みページ数は、最小が「探索行数÷ページ当たり平均行数」、最大が探索行数に等しいこと。(3) データの投入順で決まるクラスタ率や、同じバッファを共有する処理どうしの追い出しによって、実測値が見積りからずれること。
出典:独立行政法人 情報処理推進機構(IPA)令和2年度10月 データベーススペシャリスト試験 午後Ⅱ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針