DB勉強会レポート_2019年01月15日(火)実施分【後編】

こんにちは。
前編では設問1 (3)を解説しました。
もう一息です、頑張りましょう!

今回の解説範囲

平成30年度 春期 データベーススペシャリスト試験 午後Ⅰ 問3

設問1 (4)

作業W5(表領域設計)について、表5中のア〜キに入れる適切な字句を、表5中の下線部分の用語を用いて答えよ。


設問に関する情報を問題文中から探し整理していきましょう。

表2 物理DB設計及び実装の作業工程表(抜粋)

作業順 作業ID 作業名 作業内容
5 W5 表領域設計 テーブル及び索引のストレージ所要量を見積もり、表領域をストレージに割り当てる設計を行う。

表5 可変長列があるテーブルのストレージ所要量を見積もる計算の手順(未完成)

手順 手順の内容
1 テーブルの見積行数, 平均行長(バイト)及び最大行長(バイト)を得る。
2 RDBMSで指定できるページ長の中から, の行を1行以上格納できるページ長を決め, ページ長からヘッダ部を除いた有効ページ長(バイト)を得る。
3 テーブルに行をロードした後, ページあたり1行以上を挿入したい場合, 次の不等式を満たす適切な空き領域率(%)を決める。
  平均行長 ≦ × 空き容量 ÷ 100
4 次の計算式によって, テーブルのストレージ所要量(バイト)を求める。
  ページ当たりの平均行数 = ÷ の小数点以下を切捨て
  必要ページ数 = ÷ の小数点以下を切上げ
  テーブルのストレージ所要量 = ×

それぞれで求めるものを整理すると、

  • 手順1: 見積行数平均行長最大行長
  • 手順2: 有効ページ長
  • 手順3: 空き領域率
  • 手順4: ストレージ所要量

になります。


さて、表5に「可変長列」について、固定長列との違いと併せて確認しておきましょう。

種別 説明 データ型例 長所 短所
固定長 実データサイズとは関係なく格納領域のバイト数が定義される CHAR 必要ストレージ量を見積もり易い 実データと格納領域に乖離が生じやすく、ストレージを無駄遣いし易い
可変長 データサイズに合わせて格納領域のバイト数が定義される NVARCHAR, VARCHAR, LVARCHAR ストレージを効率良く活用出来る 必要ストレージ量を見積もり辛い

参考:固定長文字 (CHARACTER) 型と可変長文字 (CHARACTER) 型_IBM Knowledge Center


次に、下線部分の用語について確認します。

用語 意味 単位
見積行数 テーブルに格納されるであろう行数
平均行長 テーブルの行あたりの平均データサイズ バイト
最大行長 テーブルの行あたりの最大データサイズ バイト
ページ ページあたりのデータサイズ。有効ページ長 + ヘッダサイズ バイト
有効ページ長 ページ長 – ヘッダサイズ バイト
ページ当たりの平均行数 ページあたりの格納されている行数
必要ページ数 テーブルの行を格納するために必要なページ数 ページ

解説

それでは、それぞれの空欄に入る選択肢を考えていきましょう。

有効ページ長(バイト)は「 × 行数」で求められることが分かります。

さて、ここで小学生の時に習った「答えの単位は非乗数(かけられる数)と一致する」という算数の知識がヒントになります。

例えば、一人当たりの参加費500円の読書会に20人が参加した時の集まった合計額を求める時の式は、「500円 × 20人 = 10,000円」です。
非乗数の500円と答えの10000円の単位は一致するというのが基本です。

それを踏まえると、「 × 行数 = 有効ページ長(バイト)」のには、単位が「バイト」の用語が入ることが分かります。

バイトの単位を持つ候補となる下線部分の用語は、「平均行長」「最大行長」「ページ」の三つです。
ただし、「一行以上格納できるページ長を決め」とありますので、ページの中にページを格納するのは構造的におかしいと分かります。

よって、選択肢は「平均行長」と「最大行長」の二つに絞られました。

問題は「可変長列」があるテーブルのストレージ所要量の見積もりだということです。
格納領域は実データサイズに依存するので、小さければごく少ないストレージ領域しか使わないし、大きければ多くの領域を使います。
もし「平均行長」で見積もると、それより大きなデータサイズになった時、容量が溢れてしまいます。
可変長列である以上、ワーストケース、つまり最大のデータサイズを見積もらなければなりません。

よって、[ ア ]には「最大行長」が入ります。

/

まず空欄ですが、手順4で空欄とともに求めてしまう方が難易度が低いかと思います。
求めるのはページあたりの平均行数です。

ページの図ではきっちり3行ずつページに格納されていますが、実際にはその数はバラバラであることが多いです。
そこで、平均でページあたりどのくらいの行数が格納されているかを計算する必要性が出てきます。

いきなり空欄を埋めるのは見当がつかなくて辛い(典型的な文系脳)。
そこでまた小学生で習ったことに立ち返りましょう。

こんな例はどうでしょう?
ある対荷重1,000kgエレベーターは平均で何人の人を乗せられるか、という問題です。
乗員の体重はひとによってまちまちですが、2018年01月30日現在の日本人平均体重56kgで見積もります。
平均乗員数を求めると「1,000kg ÷ 56kg = 17.857」、小数点以下切り捨てで「17人」となります。

このように、「入れ物の大きさ」を「中味の平均の大きさ」で除算すると、「その入れ物に平均でどのくらい入るか」を求めることが出来ます。

さて、手順4に目を転じましょう。
「入れ物 = ページの大きさ」は溢れてしまわないようにワーストケースを想定する必要がありますので、「有効ページ長」、「中味 = 行の平均の大きさ」は「平均行長」が当てはまります。

よって、には「有効ページ長」、には「平均行長」がそれぞれ入ります。

が求まったことで、手順3の式の空欄も埋まり、「平均行長 ≦ 有効ページ長 × 空き容量 ÷ 100」となります。

/

ここではテーブルの「必要ページ数」、つまり「これだけの行をページあたりこのくらいの行数で格納していったら、全体でこのくらいのページ数が必要になる」かを求めます。

この手の問題は具体的な数字を仮定して考えると解きやすいので、以下のようなシナリオを考えてみましょう。

10,000行のデータを、ページあたり100ページずつ格納すると、必要なページ数はいくつでしょう?
答えは100行ですね。
これを求める式は「10,000 ÷ 100」です。

問題では10,000という数字は登場しない仮定の数字ですが、下線部分の用語で答えると何でしょうか?
また、実際全てのページが100行格納するとは限らず、あくまで「全体としてだいたいくらいの行数」を格納するという意味で、下線部分の用語で答えると何でしょうか?

それぞれ、「見積行数」と「ページ当たりの平均行数」です。

「見積行数」10,000行、「ページ当たりの平均行数」を100行とすると、
「必要ページ数 = 見積行数 ÷ ページ当たりの平均行数」、つまり「10,000 ÷ 100」で100行が「必要ページ数」であると求まります。

よって、には「見積行数」、には「ページ当たりの平均行数」が入ります。

/

最後は「テーブルのストレージ所要量」を求める式です。

あとは一つあたりのページのデータサイズはどのくらいか、そしてページ数が全体でいくつあるのかを元に求めることができます。

ストレージの所要量を求める際は格納される全てのデータサイズが考慮の対象となります。
なので、一つあたりのページのデータサイズはどのくらいかを考える時に、あるもののデータサイズを考える必要があります。

そう、手順2にある「ヘッダ部」です。

手順2の記述を読むと、ヘッダ部を含むページのデータサイズは「ページ長」と定義されています。
これに全体のページ数、つまり「必要ページ数」をかければ「テーブルのストレージ所要量」が求まります。
つまり、「テーブルのストレージ所要量 = ページ長 × 必要ページ数」が式となります。

よって、には「ページ長」、には「必要ページ数」が入ります。

今回の設問の解答

  • 設問1 (4)
    • ア. 最大行長
    • イ. 有効ページ長
    • ウ. 平均行長
    • エ. 見積行数
    • オ. ページ当たりの平均行数
    • カ. ページ長
    • キ. 必要ページ数

参考ページ

次回解説予定範囲

平成30年度 春期 データベーススペシャリスト試験 午後Ⅰ 問3 設問1 (5) – 設問2 (3)

関連記事

DB勉強会レポート_2019年01月22日(火)実施分

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

Oasist

自然言語処理を細々と勉強中。言語学を特集したブログを不定期で更新中。 英語版 日本語版

Oasistの書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ