DBデータベーススペシャリスト試験 午後Ⅱ

平成31年度春期 データベーススペシャリスト 午後Ⅱ 問1

事例を読んで設問の答えを考えてから、解説のポイントとIPA公式の解答例・採点講評で確認しましょう。

問題

問1 データベースの設計,実装に関する次の記述を読んで,設問1~3に答えよ。 B銀行では,支店の窓口において,預金の入出金,税金・公共料金の収納,振込などの金融サービス業務(以下,窓口業務という)を行っている。現在,行員が使用する窓口業務専用の端末(以下,窓口端末という)で記録されたログを,障害調査,監査などに利用している。今後は,蓄積したログを更に活用して,事務手続,アプリケーションソフトウェア(以下,APという)の改善に役立てるために,ログ分析システムを構築することにした。 [システムの現状] 1. 現行システムの構成 (1)支店は60支店あり,店番で識別している。各支店には,複数の窓口端末がある。窓口端末は,PC,モニタ,スキャナ,プリンタ,現金処理機などを組み合わせた端末で,支店ごとに一意な機番で識別している。 (2)データセンタが1拠点ある。データセンタには,窓口端末サーバ,ホストコンピュータがある。窓口端末サーバでは,全支店の窓口端末の監視,ログ収集,APの配布などを行う運用管理システムが稼働しており,ホストコンピュータでは,業務処理を行う勘定系システムが稼働している。 (3)支店内,データセンタ内の機器はLANで接続されており,LAN間はWANで接続されている。 (4)窓口端末のPCでは,窓口端末用のAP(以下,端末APという)が稼働している。端末APは,業務ロジックをもたず,勘定系システムと連動しながら,画面の入出力及び接続機器の制御を行っている。 (5)端末APでは,預金入金,預金出金,振替などの取引ごとに取引メニューが用意されており,取引は,取引番号で識別している。取引メニューに対応する手続用の画面が複数ある。画面は,全体で一意な画面番号で識別している。 2. ログ収集・利用状況 (1)窓口端末には,ログを自動的に記録する機能が備わっている。窓口端末のPCは,ログをログファイルに保存し,約15分ごとに窓口端末サーバに転送している。 (2)ログには,店番,機番,タイムスタンプ(以下,TSという),及びログテキストを記録する。ログテキストは,取引番号,画面番号,画面ごとに固有な項目とその値を“[項目ID:項目名=値:値の説明]”(値の説明の表示は任意)の形式で編集した文字列を連結したものである。表1にログの例を示す。 表1 ログの例(一部省略) (3)窓口端末サーバでは,RDBMSが稼働していて,窓口端末のPCから収集したログファイルのデータを,約1時間ごとに“ログ収集”テーブルに格納している。 (4)利用者である行員(以下,利用者という)は,店番,機番,及びTSの範囲を指定してテーブルの行を選択し,TS及びログテキストを射影する問合せを行って,障害調査,監査の際に利用している。 [新たなログ分析システムの構築] 1. ログ分析システムの主な機能 (1)蓄積した60か月分のログを対象に,障害調査,監査,事務手続改善,AP改善に用いるデータを抽出するログ分析処理の機能を提供する。表2に,ログ分析処理の例を示す。 (2)ログ分析システムの利用時間帯は,平日の8:00~22:00である。毎月の最終営業日の22:00から,翌営業日の8:00までの間に,過去データの削除,再編成などの処理(以下,月末処理という)を行う。 表2 ログ分析処理の例 2. ログ分析システムの構成 (1)窓口端末サーバで稼働中のRDBMSをログ分析システムに利用する。 (2)分析用データの作成・参照・削除に用いるAP(以下,分析APという)を新たに開発し,窓口端末及び窓口端末サーバ上で稼働させる。 3. ログ分析システムのテーブル 次の方針でデータベースにデータを格納することにし,図1のログ分析システムのテーブル構造,表3の主なテーブルのデータ量見積りを作成した。 (1)支店から収集したログは,現状どおり“ログ収集”テーブルに格納する。格納処理は,ログファイルごとに,並行して実行する。新たに発生したログを追加するだけで,更新は行わない。 (2)“ログ基本”テーブルには,“ログ収集”テーブルの各行に対応する行を格納し,一意な文字列であるログIDで識別する。検索,集計のキーとなる項目を列として定義し,ログテキストから取り出した値を設定する。年月には,TSの年月を設定する。 (3)ログテキスト内に記録されている複数の操作を,操作ごとに分割して“ログ明細”テーブルに格納する。 (4)取引の開始から終了までの手続は,複数の操作に分岐していくので,ログは木構造をもつ。分析APによってログを解析し,取引開始ログをルートノードに,その他のログをノードとする木構造の関連を“ログ関連”テーブルに格納する。 (5)マスタ情報(支店,端末種別,窓口端末,取引種別,取引,画面,行員,行員所属)を各テーブルに格納する。マスタ情報は,データ量が少なく,更新は月1回なので,月末処理で変更を反映する。 (6)“ログ収集”,“ログ基本”,“ログ明細”,“ログ関連”テーブルは,月末処理において,TSが翌月の60か月前の月以前の行を削除して,59か月分のログが保存された状態にする。月が変わった後のログを合わせて60か月分を保有する。 図1 ログ分析システムのテーブル構造(一部省略) 表3 主なテーブルのデータ量見積り [RDBMSの主な仕様] ログ分析システムに利用するRDBMSの主な仕様は次のとおりである。 1. ページ RDBMSとストレージ間の入出力単位をページという。同じページに異なるテーブルの行が格納されることはない。 2. オプティマイザの仕様 (1)LIKE述語の検索パターンが‘ABC%’のように前方一致の場合は索引探索を選択し,‘%ABC%’,‘%ABC’のように部分一致,後方一致の場合は表探索を選択する。 (2)WHERE句の述語が関数を含む場合,表探索を選択する。 3. 再帰的な問合せの構文のサポート WITH句にRECURSIVEを指定した再帰的な問合せの構文をサポートする。再帰的な問合せの構文を用いると,例えば,階層構造の組織について,ある組織を起点として上位又は下位の組織を,階層に沿って連続的に検索することができる。 4. ウインドウ関数のサポート ウインドウ関数をサポートする。例えば,選択する行ごとに,その直前の行の列値を参照したい場合には,LAG関数が使用できる。 5. テーブルの物理分割 (1)テーブルごとに一つ又は複数の列を区分キーとし,区分キーの値に基づいて物理的な格納領域を分ける。これを物理分割という。 (2)区分方法には,ハッシュとレンジの二つがある。ハッシュは,区分キー値を基にRDBMS内部で生成するハッシュ値によって,一定数の区分に行を分配する方法である。レンジは,区分キー値によって決められる区分に行を分配する方法で,分配する条件を,値の範囲又は値のリストで指定する。 (3)物理分割されたテーブルには,区分キーの値に基づいて分割された索引(以下,ローカル索引という)を定義できる。ローカル索引のキー列には,区分キーを構成する列(以下,区分キー列という)が全て含まれていなければならない。 (4)テーブルを検索するSQL文のWHERE句の述語に区分キー列を指定すると,区分キー列で特定した区分だけを探索する。また,WHERE句の述語に,ローカル索引の先頭列を指定すると,ローカル索引によって区分内を探索することができる。 (5)問合せの実行時に,一つのテーブルの複数の区分を並行して同時に探索する。同一サーバ上では,問合せごとの同時並行探索数の上限は20である。 (6)指定した区分を削除するコマンドがある。区分内の格納行数が多い場合,コマンドによる区分の削除は,DELETE文よりも高速である。 6. クラスタ構成のサポート (1)シェアードナッシング方式のクラスタ構成をサポートする。クラスタは複数のノードで構成され,各ノードには,当該ノードだけがアクセス可能なディスク装置をもつ。 (2)各ノードへのデータの配置方法には,次に示す分散と複製があり,テーブルごとにいずれかを指定する。 ・分散による配置方法は,一つ又は複数の列を分散キーとして指定し,分散キーの値に基づいてRDBMS内部で生成するハッシュ値によって各ノードにデータを分散する。分散キーに指定する列は,主キーを構成する全て又は一部の列である必要がある。 ・複製による配置方法は,全ノードにテーブルの複製を保持する。 (3)データベースへの要求は,いずれか一つのノードで受け付ける。要求を受け付けたノードは,要求を解析し,自ノードに配置されているデータへの処理は自ノードで処理を行う。自ノードに配置されていないデータへの処理は,当該データが配置されている他ノードに処理を依頼し,結果を受け取る。特に,テーブル間の結合では,他ノードに処理を依頼するので,自ノード内で処理する場合と比べて,ノード間通信のオーバーヘッドが発生する。 [問合せの検討] 1. 問合せの傾向分析・索引設計 表2の処理1~6の参照テーブルを表4にまとめて,問合せの傾向を分析した。また,図1中のマスタ情報を格納するテーブルについて,処理1~6で結合に用いられる主キー以外の列に索引を定義することにし,その対象テーブル名・列名を表5にまとめた。 表4 処理1~6の参照テーブル(未完成) 表5 主キー以外の索引定義対象テーブル名・列名(未完成) 2. 処理1の問合せ検討 表2の処理1の問合せに用いる図2のSQL文を作成した。 図2 処理1の問合せに用いるSQL文(未完成) 3. 処理2の問合せ検討 表2の処理2の問合せに用いるSQL文の例を,図3~5に作成した。ここで,GET_LAPSE(TS1、 TS2)は,TS1からTS2までの経過時間を,ミリ秒単位の整数で返却するユーザ定義関数である。また,図5中の【ア】は,図3,4のSQL文と同じ結果を返すように,“ログ基本”テーブルに追加した列の列名である。 なお,図3~5の結果行には,分析対象でない前画面番号と後画面番号の組が含まれるが,これらは,分析AP上で別途除外されるものとする。 図3 処理2の問合せに用いるSQL文の例1(未完成) 図4 処理2の問合せに用いるSQL文の例2(未完成) 図5 処理2の問合せに用いるSQL文の例3(未完成) [“ログ関連”テーブルの検討] 1. テーブル構造の案 木構造をもつデータを取り扱う場合,テーブル構造によって,行の追加・削除の効率,問合せに用いるSQLの構文,問合せの性能,データの制限が異なる。そこで,表6の“ログ関連”テーブルのテーブル構造案1~3を検討することにした。 検討に当たって,木構造をもつログの例を用いて案を比較することにし,各案におけるテーブルの行を表7~9に,案3の左端番号・右端番号付与の例を図6にまとめた。 表6 “ログ関連”テーブルのテーブル構造案 表7 案1の行 表8 案2の行 表9 案3の行 図6 案3の左端番号・右端番号付与の例 2. テーブル構造案の検討 表6の案ごとに,次の問合せ[A],[B]に用いるSQL文の案を,表10にまとめた。 ・問合せ[A] ログID=‘101’及びその下位の全てのログIDを抽出する。 ・問合せ[B] ログID=‘105’及びその上位の全てのログIDを抽出する。 表10 問合せに用いるSQL文の案(未完成) 3. テーブル構造案の評価 行の追加・削除の効率の観点では,例えば,ログID=‘199’の新たなログを‘101’の下位,‘103’の上位に追加し,‘103’の階層の深さが一つ下がる場合,‘199’の行追加以外の更新行数は,案1では1行,案2では【i】行,案3では【j】行である。案【k】の負荷が最も高いが,本業務では,【l】ので,変更時の負荷は問題にならない。 問合せの難易度の観点では,処理3の問合せにSQL文を用いる場合,案1では,【m】の構文を用いるが,案2,3では,選択,射影,【n】の関係演算を行う構文を用いればよい。案2と案3の問合せの性能を比較すると,RDBMSのオプティマイザの仕様から,表10の問合せ[A]ではほぼ同等であるが,問合せ[B]では案2が劣る。 これらの評価から,案3による実装が最適と判断されるが,左端番号,右端番号の列を整数型で定義する場合,整数型の上限を超えないように留意する必要がある。 [テーブルの物理分割・クラスタ構成の検討] ログデータを格納するテーブルは,格納行数が多いので,データの追加,参照,削除の性能が懸念される。そこで,テーブルの物理分割を行うことにした。 1. “ログ収集”テーブルの物理分割 表11の“ログ収集”テーブルの物理分割案A~Cを作成し,性能評価を行った。各案の性能を相対的に評価し,性能が低い案から順に0,1,2の点数を付ける。評価が同じ案は,同じ点数とする。 表11 “ログ収集”テーブルの物理分割案・性能評価 2. “ログ基本”テーブルの物理分割 (1)物理分割案とその評価 “ログ収集”テーブルと同様に,表12の“ログ基本”テーブルの物理分割案D~Fを作成し,性能評価を行った。追加,削除の性能評価は“ログ収集”テーブルと同様であったが,参照の性能評価は処理によって異なるので,更に処理ごとに性能評価を行うことにした。 表12 “ログ基本”テーブルの物理分割案・性能評価 (2)探索対象ページ数試算による性能評価 表2の処理4~6における物理分割案D~Fについて,次の①~④を前提条件として,探索対象の最大区分数(以下,探索区分数という),テーブルからの読込みページ数(以下,探索ページ数という)を試算し,表13を作成した。 ① “ログ基本”テーブルへのアクセスだけを対象とする。どの処理でも,検索条件に合致する行は,30、000行あるものとする。 ② 月末営業日の処理を想定し,60か月分のログが全て蓄積されていて,ログは各支店,各年月に均一に分布しているものとする。 ③ どの区分方法でも,ページ総数は同じで,どのページにも最大行数のデータが格納され,ページは各区分に均等に配置されているものとする。また,テーブルの行が複数ページに分割されて格納されることはないものとする。 ④ バッファヒット率は,索引のページでは100%,テーブルのページでは0%とする。 表13 表2の処理4~6における探索区分数・探索ページ数試算(未完成) 3. クラスタ構成の検討 テーブルの物理分割だけでは,将来的なデータ量の増加に対応できないので,RDBMSがサポートしているクラスタ構成の検討を行った。クラスタ構成への変更に当たり,各テーブルのデータの配置方法に分散を指定し,主キー列を分散キーとして設定することにした。 クラスタ構成への変更後,表2の処理2,4の性能を試算したところ,処理2は同時並行探索数の上限がなくなることで性能が改善されたが,処理4は性能が低下することが判明した。そこで,処理4の性能低下への対策として,“取引種別”テーブル,“取引”テーブル及び“ログ明細”テーブルのデータの配置方法を見直すことにした。 設問1 [問合せの検討]について,(1)~(4)に答えよ。 (1)表4中の太枠内に“○”印を記入し,表を完成させよ。 (2)表5中の空欄を埋め,表を完成させよ。 (3)図2中の【a】~【c】に入れる適切な字句を答えよ。また,図3~5中の【d】に入れる適切な字句を答えよ。 (4)図5中の【ア】の列に事前に設定すべき値の内容を,20字以内で具体的に述べよ。 設問2 [“ログ関連”テーブルの検討]について,(1)~(3)に答えよ。 (1)表10中の【e】~【h】に入れる適切な字句を答えよ。 (2)“3. テーブル構造案の評価”の本文中の【i】~【k】に入れる適切な数字を答えよ。また,【l】~【n】に入れる適切な字句を,本文中の用語を用いて答えよ。 (3)“3. テーブル構造案の評価”の本文中の下線部について,問合せ[B]では,案2の性能が案3よりも劣る理由を,30字以内で具体的に述べよ。 設問3 [テーブルの物理分割・クラスタ構成の検討]について,(1)~(3)に答えよ。 (1)表11中の性能評価について,次の①,②をそれぞれ30字以内で具体的に述べよ。 ① 追加の性能評価において,案Cが低い理由 ② 参照の性能評価において,どの案も同じ理由 (2)表13中の【o】~【r】に入れる適切な数値を答えよ。また,案Eについて,処理4,5の探索ページ数の試算値が最小となるローカル索引を構成する列名を全て答えよ。 (3)“3. クラスタ構成の検討”について,①~③に答えよ。 ① 処理4の性能が低下した理由を,50字以内で具体的に述べよ。 ② “取引種別”テーブル及び“取引”テーブルについて行うべき対応を,20字以内で具体的に述べよ。 ③ “ログ明細”テーブルの分散キーを見直すことにした。どのように見直せばよいか,20字以内で具体的に述べよ。
表1 ログの例(一部省略)。店番,機番,TS,ログテキストから成るログ記録の具体例を3行示した表。
表1 ログの例(一部省略)。店番,機番,TS,ログテキストから成るログ記録の具体例を3行示した表。
表2 ログ分析処理の例。ログ分析処理1~6について,各処理の対象データ,集計・表示内容,利用条件を整理した表。
表2 ログ分析処理の例。ログ分析処理1~6について,各処理の対象データ,集計・表示内容,利用条件を整理した表。
図1 ログ分析システムのテーブル構造(一部省略)。支店,端末,取引,行員,ログ関連などのマスタ表とログ表の構成を示すデータベース表構造図。
図1 ログ分析システムのテーブル構造(一部省略)。支店,端末,取引,行員,ログ関連などのマスタ表とログ表の構成を示すデータベース表構造図。
表3 主なテーブルのデータ量見積り。ログ収集,ログ基本,ログ明細の見積行数,ページ長,平均行長,ページ数を示す表。
表3 主なテーブルのデータ量見積り。ログ収集,ログ基本,ログ明細の見積行数,ページ長,平均行長,ページ数を示す表。
表4 処理1~6の参照テーブル(未完成)。処理1~6と各テーブルの参照関係を丸印で示す未完成の対応表。
表4 処理1~6の参照テーブル(未完成)。処理1~6と各テーブルの参照関係を丸印で示す未完成の対応表。
表5 主キー以外の索引定義対象テーブル名・列名(未完成)。追加索引を定義するテーブル名と列名を記入する未完成の表。
表5 主キー以外の索引定義対象テーブル名・列名(未完成)。追加索引を定義するテーブル名と列名を記入する未完成の表。
図2 処理1の問合せに用いるSQL文(未完成)。権限レベルに応じた検索条件を一時表で作成し,ログ基本とマスタ表を結合するSQL文。
図2 処理1の問合せに用いるSQL文(未完成)。権限レベルに応じた検索条件を一時表で作成し,ログ基本とマスタ表を結合するSQL文。
図3 処理2の問合せに用いるSQL文の例1(未完成)。ログ基本を自己結合し,各ログの直前のTSをサブクエリで求めて画面遷移時間を平均するSQL文。
図3 処理2の問合せに用いるSQL文の例1(未完成)。ログ基本を自己結合し,各ログの直前のTSをサブクエリで求めて画面遷移時間を平均するSQL文。
図4 処理2の問合せに用いるSQL文の例2(未完成)。LAG関数とウインドウ指定で直前の画面番号と経過時間を求めるSQL文。
図4 処理2の問合せに用いるSQL文の例2(未完成)。LAG関数とウインドウ指定で直前の画面番号と経過時間を求めるSQL文。
図5 処理2の問合せに用いるSQL文の例3(未完成)。ログ基本に追加した連番列を用いて直前行を結合し,画面遷移時間を平均するSQL文。
図5 処理2の問合せに用いるSQL文の例3(未完成)。ログ基本に追加した連番列を用いて直前行を結合し,画面遷移時間を平均するSQL文。
表6 “ログ関連”テーブルのテーブル構造案。親ログID方式,経路方式,左端・右端番号方式の3案と,各案の特徴を比較した表。
表6 “ログ関連”テーブルのテーブル構造案。親ログID方式,経路方式,左端・右端番号方式の3案と,各案の特徴を比較した表。
表7 案1の行。ログIDと親ログIDによって木構造を表現した案1のデータ例。
表7 案1の行。ログIDと親ログIDによって木構造を表現した案1のデータ例。
表8 案2の行。ログIDとルートからの経路文字列によって木構造を表現した案2のデータ例。
表8 案2の行。ログIDとルートからの経路文字列によって木構造を表現した案2のデータ例。
表9 案3の行。ログID,左端番号,右端番号によって木構造を表現した案3のデータ例。
表9 案3の行。ログID,左端番号,右端番号によって木構造を表現した案3のデータ例。
図6 案3の左端番号・右端番号付与の例。ログIDをノードとする二つの木構造に,左端番号と右端番号を付与する順序を示した図。
図6 案3の左端番号・右端番号付与の例。ログIDをノードとする二つの木構造に,左端番号と右端番号を付与する順序を示した図。
表10 問合せに用いるSQL文の案(未完成)。ログ関連の3案について,下位検索と上位検索に用いるSQL文を並べた未完成の比較表。
表10 問合せに用いるSQL文の案(未完成)。ログ関連の3案について,下位検索と上位検索に用いるSQL文を並べた未完成の比較表。
表11 “ログ収集”テーブルの物理分割案・性能評価。ハッシュ分割とレンジ分割による案A~Cについて,索引と追加・参照・削除性能を比較した表。
表11 “ログ収集”テーブルの物理分割案・性能評価。ハッシュ分割とレンジ分割による案A~Cについて,索引と追加・参照・削除性能を比較した表。
表12 “ログ基本”テーブルの物理分割案・性能評価。ログID,店番,年月を区分キーとする案D~Fについて,索引と追加・参照・削除性能を比較した表。
表12 “ログ基本”テーブルの物理分割案・性能評価。ログID,店番,年月を区分キーとする案D~Fについて,索引と追加・参照・削除性能を比較した表。
表13 表2の処理4~6における探索区分数・探索ページ数試算(未完成)。物理分割案D~Fについて,処理4~6の探索区分数と探索ページ数を試算した未完成表。
表13 表2の処理4~6における探索区分数・探索ページ数試算(未完成)。物理分割案D~Fについて,処理4~6の探索区分数と探索ページ数を試算した未完成表。
解き方のヒントを見る

処理の読み方と設計の対応を確かめる

性能を問う設計の検討では、処理がどの条件でデータを探し、どれだけの量を読むのかを先に整理します。そのうえで、各設計要素がその読み方に合っているかを、与えられた記述に沿って一つずつ照らし合わせてください。

この問題で問われていること

着目する観点は、処理がデータへたどり着く経路の一つだけです。記述された処理の条件や頻度をもとに、その処理がどのデータをどの順でたどるかを自分の言葉で書き出し、設計の意図と結び付けてから判断してください。

視点

データベースの性能は、設計上の工夫があるかどうかだけでは決まりません。その工夫が実際の処理の読み方と噛み合っているかどうかで決まります。処理の条件が変われば、同じ設計でも評価は変わり得ます。そのため、一般論の暗記に頼らず、与えられた前提から処理の流れを組み立て直して評価することが大切です。

確認ポイント

  • 対象となる処理が、どの項目の条件でデータを絞り込んでいるかを記述から拾い出したか
  • その処理が読む範囲や件数、実行の頻度について、与えられた前提を確認したか
  • 判断の根拠が一般論ではなく、書き出した処理の経路と設計要素との対応に基づいているか
正解と解説を見る

解説

B銀行のログ分析システムを題材に、参照テーブルの洗い出し、権限レベルに応じたSQL、ウインドウ関数や連番を使った直前ログとの結合を扱います。さらに、木構造を表すテーブル構造3案の比較、物理分割案の性能評価、シェアードナッシング型クラスタでのデータ配置見直しまで、RDBMSの仕様に基づいて一貫して評価させる問題です。

問題の全体像

B銀行は、窓口端末のログを60か月分蓄積し、障害調査・監査・事務手続改善・AP改善に活用するログ分析システムを構築します。データを格納するテーブルは、ログ収集・ログ基本・ログ明細・ログ関連とマスタ類です。問題文には、オプティマイザの仕様、再帰問合せ、ウインドウ関数、物理分割(ハッシュ/レンジ、ローカル索引、区分削除コマンド)、シェアードナッシング型クラスタ(分散/複製)という仕様が示されています。設問1は問合せの設計、設問2は木構造を格納するログ関連テーブルの構造比較、設問3は物理分割とクラスタ構成の評価です。出題趣旨では、要求の整理、テーブル設計、区分化の設計、データ操作の設計、アクセス性能の見積りといった能力を評価するとされています。採点講評では、設問3の正答率が全体的に低く、特にローカル索引の列名とクラスタ構成の仕様理解に不十分な解答が見られたと指摘されています。

設問1(1)

表2の処理5と処理6の出力項目と集計キーを、図1のどの列から得るかを追います。

・処理5:店番と端末種別コードごとに明細件数(ログ基本の列)を集計し、店名と端末種別名を出力します。店名は支店から取ります。ログ基本には端末種別コードがないので、店番・機番で窓口端末を結合して端末種別コードを得て、さらに端末種別から端末種別名を取ります。

・処理6:画面番号を指定し、店名と取引種別名ごとに明細件数を集計して、タイトルも出力します。タイトルは画面、店名は支店から取ります。取引種別名は、ログ基本の取引番号から取引を経由して取引種別へたどります。

このため公式解答例では、処理5は支店・端末種別・窓口端末、処理6は支店・取引種別・取引・画面に○を付けています。

設問1(2)

表5には、マスタテーブルのうち、処理1〜6の結合で使う主キー以外の列を挙げます。処理5では、窓口端末の端末種別コード(外部キー)で端末種別と結合します。処理4と処理6では、取引の取引種別コードで取引種別と結合します。公式解答例では、窓口端末の端末種別コードと、取引の取引種別コードの2行が答えです。

設問1(3)(a)

処理1の権限レベル'1'は「所属支店かつ本人のログ」、'2'は「所属支店のログ」、'3'は「全ログ」を対象にします。店番で絞り込む必要があるのはレベル'1'と'2'です。そのため検索店番に所属店番を入れる条件は、公式解答例のとおりIN('1'、'2')になります。レベル'3'ではNULLになります。

設問1(3)(b)

本人のログだけに絞るのはレベル'1'だけです。そのため検索行員番号に行員番号を入れる条件は、公式解答例のとおり= '1'です。それ以外のレベルではNULLになり、行員番号での絞込みは行われません。

設問1(3)(c)

a・bでNULLにした検索店番や検索行員番号は、「絞り込まない」ことを表します。そのためWHERE句は「検索店番がNULLである、または検索店番がA.店番と一致する」という形にします。公式解答例ではIS NULLです。レベル'3'では両方ともNULLになるので、年月の条件だけで全ログが対象になります。

設問1(3)(d)

処理2は、前画面番号・後画面番号・平均経過時間を「平均経過時間の降順に出力する」と定めています。図3〜5はいずれもGROUP BYで終わっていて、並べ替えがありません。そのため公式解答例ではORDER BY 平均経過時間 DESCを補います。

設問1(4)

図5では、店番・機番が等しく、かつ(A.ア - 1) = B.アという条件でBを結合しています。これでBを「同じ窓口端末でTS順の直前のログ」にするには、アの列に、店番・機番・TSの順に並べたときに1ずつ増える連続した整数を事前に設定しておく必要があります。公式解答例は「店番,機番,TSの順に連続する整数」(17字)です。採点講評では、「画面遷移の連番」のように連番を付ける単位を考慮していない誤答が見られたと指摘されています。SQL中の結合条件から処理の単位(店番・機番ごとのTS順)を読み取ることが重要です。

設問2(1)(e)

問合せ[B]は、「ログID='105'及びその上位」を求めます。再帰問合せの非再帰部(起点)では、起点となるログを1行取り出します。そのため公式解答例ではログID = '105'です。

設問2(1)(f)

再帰部では、TEMP B(すでに求めたノード。最初は105)の親をログ関連Aから探します。ある行の親は、その行の親ログIDをログIDにもつ行です。したがって条件は「A.ログID = B.親ログID」で、公式解答例では空欄fはB.親ログIDです。この条件で、Bの親ログIDと同じログIDをもつ行Aが上位ノードとして見つかります。Aの行(ログIDと親ログID)はTEMPに追加されて、次の繰返しでBになります。表7の例では、105の親ログID(103)から103が、103の親ログID(101)から101が見つかります。101の親ログIDはNULLなので一致する行がなく、再帰はそこで終わります。問合せ[A]は下位方向をたどるので条件がA.親ログID = B.ログIDになっており、上位方向の[B]とは等号の左右の列の役割が逆になっている点に注意します。

設問2(1)(g)

案3では、上位ノードの区間(左端番号〜右端番号)が下位ノードの区間を含みます。問合せ[A]では、A(101)の区間に含まれるBを求めていました。[B]は、A(105)を含む区間をもつBを求めるので、比較の向きが逆になります。公式解答例では、gとhは順不同で、A.左端番号 >= B.左端番号とA.右端番号 <= B.右端番号です。等号を含めることで、105自身も結果に含まれます。

設問2(1)(h)

g・hの2条件は順不同で、両方がそろって「Bの区間がAの区間を包含する」ことを表します。表9で確かめると、105(7、8)に対して101(1、12)、103(4、11)、105自身が条件を満たします。一方、102(2、3)は右端番号3が8より小さいので除外されます。公式解答例のhはA.右端番号 <= B.右端番号です。

設問2(2)(i)

案2では、各行の経路に、ルートからそのノードまでの全ログIDが入っています。199を101と103の間に挿入すると、経路に「101/103」を含む行はすべて「101/199/103…」に書き換えが必要です。対象は、103(101/103)と、その下位の104(101/103/104)・105(101/103/105)・106(101/103/106)です。追加する199の行以外の更新行数は、この4行です。したがって公式解答例のとおり4です。102、107〜109の経路は変わりません。

設問2(2)(j)

案3で199を挿入した後に番号を付け直すと、次のようになります。101(1、14)、102(2、3)、199(4、13)、103(5、12)、104(6、7)、105(8、9)、106(10、11)、107(15、20)、108(16、17)、109(18、19)。番号は表全体で連続する一意な値なので、別の木の107〜109も2ずつずれます。値が変わらないのは102だけです。したがって、101・103・104・105・106・107・108・109の8行が更新されます(公式解答例:8)。採点講評では、jは正答率が低かったとされ、具体的な値で検証する習慣を付けるよう求めています。

設問2(2)(k)

更新行数は案1が1行、案2が4行、案3が8行で、案3の負荷が最も高くなります。公式解答例では3です。

設問2(2)(l)

本文の「3. ログ分析システムのテーブル(1)」に、ログは「新たに発生したログを追加するだけで,更新は行わない」と書かれています。一度作った木構造が後から変更されることはないので、変更時の負荷は問題になりません。本文中の用語を使い、公式解答例では「更新は行わない」です。

設問2(2)(m)

処理3では、操作の分岐に従ってツリー形式で表示します。案1(親ログID方式)では、任意の深さの子孫をたどるために、表10の案1のようにWITH RECURSIVEを使う必要があります。RDBMS仕様の見出しの用語で、公式解答例では「再帰的な問合せ」です。

設問2(2)(n)

案2・案3では、表10のとおり、ログ関連どうし(とログ基本などの)を結合し、条件で選択して列を射影するだけで木全体を取り出せます。そのため公式解答例では、関係演算は「結合」です。

設問2(3)

表10を見ると、案2の問合せ[A]はLIKE '101%'の前方一致なので、オプティマイザ仕様(1)により索引探索になります。そのため、案3(左端番号・右端番号の索引を使える比較条件)とほぼ同等です。一方、問合せ[B]の案2はWHERE句にPOSITION関数を含むため、仕様(2)により表探索になります。公式解答例は「WHERE句の述語が関数を含む場合,表探索になるから」です。採点講評でも、アクセスパスの違いによって性能差が生じることを理解しているかが問われたとされています。

設問3(1)(①)

案CはTSの年月でレンジ分割しています。新しく発生したログは、すべて当月の1区分に追加されます。格納処理はログファイルごとに並行して実行されるので、追加が1区分に集中して待ちが発生します。一方、案A・Bは複数の区分に分散して追加できます。公式解答例は「一つの区分に行追加が集中し,待ちが発生するから」です。

設問3(1)(②)

ログ収集テーブルへの参照は、利用者が店番・機番・TSの範囲を指定する問合せ(処理3など)に限られます。案A〜Cのローカル索引はいずれも店番・機番・TSの3列で構成されているので、どの案でも索引を使って対象行に絞り込めます。そのため参照性能の評価に差が付きません。公式解答例は「検索キーが店番,機番,TSに限られるから」です。

設問3(2)(o)

処理5は、1か月分・全店番が対象で、検索条件は年月です。案Dはログのハッシュで区分しているため、年月では区分を特定できず、60区分すべてを探索します。公式解答例では60です。

設問3(2)(p)

案Dのローカル索引は{ログID}と{店番、機番、年月、ログID}です。処理5では、どちらの先頭列(ログIDや店番)も指定されないので、索引で区分内を絞り込めず表探索になります。探索ページ数はテーブル全体の60Mです(公式解答例:60M)。処理4で30、000ページになるのは、店番を指定するので索引を使えるからで、処理5との違いに注意します。

設問3(2)(q)

処理6は、前々年4月から前年3月までの12か月分が対象です。案Fは年月ごとのレンジ分割なので、探索するのは12区分です(公式解答例:12)。

設問3(2)(r)

案Fのローカル索引は{年月、ログID}です。1区分の中では年月はすべて同じ値なので、索引を使っても絞り込めません。条件の画面番号も索引に含まれません。そのため12区分をすべて読み、1区分1M×12で12Mページになります(公式解答例:12M)。

設問3(2)索引

ローカル索引は、区分キー列(店番)をすべて含む必要があります。また、区分内を索引で探索するには、先頭列を指定する必要があります。処理4(店番1つ・6か月)と処理5(全店番・1か月)のどちらでも指定されるのは年月なので、年月を先頭にして{年月、店番}とします。すると、処理4は1区分の中で6か月分に、処理5は60区分それぞれで1か月分に索引で絞り込めます。どちらも30、000ページまで減らせます。公式解答例では「年月,店番」です。採点講評では、この列名の正答率が低かったとされ、検索条件を正確に把握して索引を設計するよう求めています。

設問3(3)(①)

主キー列を分散キーにすると、ログ基本はログID、ログ明細は(ログID、明細番号)、取引は取引番号、取引種別は取引種別コードで、それぞれ別々にハッシュ分散されます。処理4はこれら4テーブルを結合するので、結合相手の行が別のノードにあることが多くなります。RDBMS仕様6(3)のとおり、結合するたびに他ノードへ処理を依頼するため、ノード間通信のオーバーヘッドが発生します。公式解答例は「結合対象のデータが各ノードに分散しており,テーブル結合を行うごとにノード間通信が必要となるから」です。

設問3(3)(②)

取引種別と取引はマスタ情報で、データ量が少なく、更新も月1回です。そのため、全ノードにテーブルの複製を持たせれば、どのノードでも自ノード内で結合できます。公式解答例は「データの配置方法に複製を指定する。」です。

設問3(3)(③)

ログ基本はログIDで分散されています。一方、ログ明細は(ログID、明細番号)で分散されるため、同じログIDの明細が複数のノードに散らばります。分散キーをログIDだけにすれば、同じログIDのログ基本とログ明細が同じノードに置かれ、結合を自ノード内で処理できます。ログIDは主キーの一部なので、分散キーの制約も満たします。公式解答例は「分散キーをログID列だけに変更する。」(または「分散キーから明細番号列を除外する。」)です。

学習のポイント

RDBMSの仕様(関数を含む述語は表探索になること、ローカル索引の先頭列、区分の削除コマンド、分散キーと複製)を根拠にして、具体的な値で行数やページ数を試算する練習をすることが重点です。

出典:独立行政法人 情報処理推進機構(IPA)平成31年度春期 データベーススペシャリスト試験 午後Ⅱ 問1(公式資料:問題冊子(PDF) / 解答例 / 採点講評)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針