データベーススペシャリスト午後I 事例記述令和3年 秋期
午後I 問2
問2 データベースの実装に関するデータベース設計・チューニング
テーマ:高負荷環境におけるRDBMSの性能見積り,区分表の設計,バッファプールおよびロギングの最適化
左右2分割表示:左側の問題文をスクロールしながら右側の設問に解答できます
長文事例本文
図表クリックで拡大問2 データベースの実装に関する次の記述を読んで,設問1〜3に答えよ。
クレジットカード会社のC社では,キャッシュレス決済の普及に伴いカード決済システムのデザイントランザクションの処理量が増えている。情報システム部のFさんは,将来の処理量から懸念される性能低下の対策を検討することになった。
〔RDBMS の主な仕様〕
1. アクセス経路,区分化,再編成
(1) アクセス経路は,RDBMS によって表探索又は索引探索に決められる。表探索では,索引を使わずに先頭ページから順に全行を探索する。索引探索では,WHERE 句中の述語に適した索引によって絞り込んでから表の行を読み込む。
(2) テーブルごとに一つ又は複数の列を区分キーとし,区分キーの値に基づいて物理的な表領域に分割することを区分化という。
(3) 区分方法にはハッシュとレンジの二つがある。どちらも,テーブルを検索する SQL 文の WHERE 句の述語に区分キー列を指定すると,区分キー列で特定した区分だけを探索する。
① ハッシュは,区分キー値を基に RDBMS が生成するハッシュ値によって一定数の区分に行を分配する方法である。
② レンジは,区分キー値の範囲によって区分に行を分配する方法である。
(4) テーブル又は区分を再編成することによって,行を主キー順に物理的に並び替えることができる。また,各ページ中に指定した空き領域を予約することができる。
(5) INSERT 文で行を挿入するとき,RDBMS は,主キー値の並びの中で,挿入行の主キー値に近い行が格納されているページに空き領域があればそのページに,なければ表領域の最後のページに格納する。最後のページに空き領域がなければ,新しいページを表領域の最後に追加する。
2. データ入出力とログ出力
(1) データとログはそれぞれ別のディスクに格納される。同じディスクに対し同時に入出力は行われないものとする。
(2) データ入出力とログ出力は 4,000 バイトのページ単位に行われる。
(3) データバッファはテーブルごとに確保される。
(4) ページをランダムに入出力する場合,SQL 処理中の CPU 処理と入出力処理は並行して行われない。これを同期データ入出力処理と呼び,SQL 処理時間は次の式で近似できる。
SQL 処理時間 = CPU 時間 + 同期データ入出力処理時間
(5) ページを順次に入出力する場合,SQL 処理中の CPU 処理と入出力処理は並行して行われる。これを非同期データ入出力処理と呼び,SQL 処理時間は次の式で近似できる。ここで関数 MAX は引数のうち最も大きい値を返す。
SQL 処理時間 = MAX (CPU 時間, 非同期データ入出力処理時間)
(6) 行を挿入,更新,削除した場合,変更内容がログとして RDBMS に一つ存在するログバッファに書き込まれる。ログバッファが一杯の場合,トランザクションの INSERT 文,UPDATE 文,DELETE 文の処理は待たされる。
(7) ログは,データより先にログバッファからディスクに出力される。これをログ出力処理と呼ぶ。このとき,トランザクションのコミットはログ出力処理の完了まで待たされる。ログ出力処理は,次のいずれかの事象を契機に行われる。
① ログバッファが一杯になった。
② トランザクションがコミット又はロールバックを行った。
③ あるテーブルのデータバッファが変更ページによって一杯になった。
〔カード決済システムの概要〕
1. テーブル
主なテーブルのテーブル構造を図1,将来の容量見積りを表1に示す。各テーブルの主キーには索引が定義されており,索引キーを構成する列の順はテーブルの列の順と同じである。
拡大
拡大
2. オーソリ処理(オンライン処理)
オーソリ処理は,会員がカードで支払う際にカード有効期限,与信限度額を超過していないかなどを判定する処理である。判定した結果,可ならば審査結果を 'Y' に,否ならば 'N' に設定した行を“オーソリ履歴”テーブルに挿入する。オーソリ処理は最大 100 多重で処理される。“オーソリ履歴”テーブルには直近5年分を保持する。
3. 利用明細抽出処理(バッチ処理)
請求書作成に必要な1か月分の利用明細の記録を“オーソリ履歴”テーブルから抽出しファイルに出力する。
〔参照処理の性能見積り〕
将来の処理時間が懸念される利用明細抽出処理の SQL 文を,図2に示す。
拡大
Fさんは,利用明細抽出処理の処理時間を,次のように見積もった。
1. この SQL 文での表の結合方法を調べたところ,“オーソリ履歴”テーブルを外側,“加盟店”テーブルを内側とする入れ子ループ法だった。“オーソリ履歴”テーブルのアクセス経路は表探索だったので, a ページを非同期に読み込む。
2. ディスク転送速度を 100M バイト/秒と仮定すれば, a ページを非同期に読み込むデータ入出力処理時間は, b 秒である。
3. カード数を 1,000 万枚,カード・月当たり平均オーソリ回数を 80 回,審査結果が全て可であると仮定すると,“オーソリ履歴”テーブルの結果行数は, c 行である。これに掛かる CPU 時間は,96,000 秒である。
4. この結合では,外側の表の結果行ごとに“加盟店”テーブルの主キー索引を索引探索し,“加盟店”テーブルを1行,ランダムに合計 d 回読み込む。
5. 索引はバッファヒット率 100%,テーブルはバッファヒット率 0%と仮定すれば,“加盟店”テーブルを合計で e ページを同期的に読み込むことになる。同期読込みにページ当たり1ミリ秒掛かると仮定すれば,同期データ入出力処理時間は f 秒である。
6. 内側の表の索引探索と結合に掛かる CPU 時間は,1結果行当たり 0.01 ミリ秒掛かると仮定すれば, g 秒である。
7. 外側の表の CPU 時間は 96,000 秒,内側の表の CPU 時間は g 秒,内側の表の同期データ入出力処理時間は f 秒なので,SQL 文の処理時間を h 秒と見積もった。
処理時間が長くなることが分かったので時間短縮のため,次の2案を検討した。
案1 “加盟店”テーブルのデータバッファを増やしバッファヒット率 100%にする。
案2 “オーソリ履歴”テーブルの利用日列をキーとする副次索引を追加する。
〔“オーソリ履歴”テーブルの区分化〕
Fさんは,上司であるG氏から,次の課題の解決策の検討を依頼された。
課題1 月末近くに起きるオーソリ処理の INSERT 文の性能低下を改善すること
課題2 将来懸念される利用明細抽出処理の処理時間を短縮すること
課題3 月初に行う“オーソリ履歴”テーブル再編成の処理時間を短縮すること
Fさんは,課題を解決するために,“オーソリ履歴”テーブルを区分化することにし,区分キーについて表2に示す3案を評価した。いずれの案も 60 区分に行を均等に分配する前提であり,図2の SQL 文を基に区分化に対応した SQL 文を作成した。作成した SQL 文の WHERE 句を図3に示す。利用明細抽出処理及び再編成について,アクセスする総ページ数が最小になるようにジョブを設計した。このときジョブは,必要に応じて並列実行させる。
拡大
拡大
〔更新処理の多重化〕
“オーソリ履歴”テーブルの請求済フラグと請求日を更新する処理も同様に,将来の処理時間が懸念された。更新処理の SQL 文を図4に示す。更新処理はバッチ処理であり,カーソルを使用して 1,000 行を更新するごとにコミットする。
```sql
UPDATE オーソリ履歴 SET 請求済フラグ = 'Y', 請求日 = :hv1
WHERE 利用日 BETWEEN :hv2 AND :hv3 AND カード番号 BETWEEN :hv4 AND :hv5
注記1 ホスト変数 hv1 は,請求日を表す。
注記2 ホスト変数 hv2, hv3 は,請求対象月の初日と末日をそれぞれ表す。
注記3 ホスト変数 hv4, hv5 は,カード番号の範囲(レンジ)の始まりと終わりをそれぞれ表す。
```
図4 更新処理のSQL文
Fさんは,次のように,区分化と併せて,更新処理を多重化することにした。
1. “オーソリ履歴”テーブルについて,カード番号,利用日の順の組で区分キーとし,レンジによって区分化する。
2. 区分ごとのジョブで更新処理を多重化する。
3. 更新処理を多重化しても競合しないように,各区分を異なるディスクに配置し,データバッファを十分に確保する。
拡大図1 主なテーブルのテーブル構造(一部省略)
拡大表1 主なテーブルの将来の容量見積り
拡大図2 利用明細抽出処理のSQL文
拡大表2 課題ごとに各案を評価した結果(未完成)
拡大図3 区分化に対応したSQL文のWHERE句
設問一覧 & 解答・演習
まずは解答を作成してみましょう。「解答例を見る」をクリックするとIPA公式解答例と採点基準が開きます。
設問1 (1)記号・選択式
〔参照処理の性能見積り〕について,本文中の a 〜 h に入れる適切な数値を答えよ。
※直接入力してください
設問1 (2)記述問題
制限字数:25 字以内
案1について,“加盟店”テーブルのデータバッファを増やすのはなぜか。また,“オーソリ履歴”テーブルはデータバッファを増やさないのはなぜか。アクセス経路に着目し,それぞれ理由を25字以内で述べよ。
0 / 25 文字
設問1 (3)記述問題
制限字数:25 字以内
案2を適用した場合,オーソリ処理の処理時間が長くなると考えられる。その理由を25字以内で述べよ。
0 / 25 文字
設問2 (1)記述問題
制限字数:25 字以内
課題1について,案Aと案Bは案Cに比べてオーソリ処理のINSERT 文の性能が良いと考えられる。その理由を25字以内で具体的に述べよ。
0 / 25 文字
設問2 (2)記号・選択式
課題2について,区分限定の表探索を行う場合,1ジョブが探索する区分数及びページ数の最小値はそれぞれ幾らか。表2中の イ,ロ に入れる適切な数値を答えよ。
※直接入力してください
設問2 (3)記述問題
制限字数:30 字以内
課題2について,案Aではカード番号にBETWEEN 述語を追加しても改善効果を得られないと考えられる。その理由を30字以内で具体的に述べよ。
0 / 30 文字
設問2 (4)記述問題
制限字数:20 字以内
課題3について,特に案Cは,区分キーの特徴から,案Aと案Bに比べて再編成の効率が良いと考えられる。その理由を20字以内で具体的に述べよ。
0 / 20 文字
設問3 (1)記述問題
制限字数:30 字以内
ジョブの多重度を幾ら増やしても,それ以上は更新処理全体の処理時間を短くできない限界がある。このときボトルネックになるのはログである。その理由をRDBMS の仕様に基づいて30字以内で述べよ。
0 / 30 文字
設問3 (2)記述問題
制限字数:25 字以内
更新処理では1,000行更新するごとにコミットしているが,仮に1行更新するごとにコミットすると,更新処理の処理時間のうち何がどのように変わるか。本文中の用語を用いて25字以内で述べよ。
0 / 25 文字
午後I長文記述の得点力を引き上げる定番対策書Amazon・楽天 公式提携
PR
IPA 厳選対策書徹底攻略 データベーススペシャリスト教科書 令和8年度株式会社わくわくスタディワールド 瀬戸 美月 著 / インプレス
DB徹底攻略株式会社わくわくスタディワールド 瀬戸 美月 著 / インプレス
徹底攻略 データベーススペシャリスト教科書 令和8年度
💡 推薦ポイント:午後I・午後IIの概念データモデル穴埋めや排他制御・性能設計の記述問題で確実に合格点を勝ち取る実践テクニックが満載です。
¥3,278(税込)
※本リンク先はプロモーション(アフィリエイト広告)が含まれています
【出題趣旨】IPA公式発表
【採点講評】IPA公式発表
本問に関連するデータベーススペシャリスト重要用語解説
本番形式・制限時間付きで演習する
令和3年 秋期 午後I(3問中2問選択・90分)を実戦演習モードで通し解答し、総合採点を受けられます。