Symfoware(R) Server RDBユーザーズガイド データベース定義編 - FUJITSU -
目次 索引 前ページ次ページ

上へ第4章 格納構造

4.4 データベーススペースの所要量の見積り

各格納構造ごとに、必要となるデータベーススペース量の見積を示します。計算式で使用する使用率などの値は目安値を後述しますが、これらの値はデータに依存して異なるため、値に幅があります。余裕をもって見積もる(安全率を乗算する)ことをお勧めします。

SEQUENTIAL構造

image

image

RANDOM構造(クラスタキーに一意性制約が設定されている場合)

image

image

RANDOM構造(クラスタキーに一意性制約が設定されていない場合)

image

OBJECT構造

image

BTREE構造のデータ部

image

image

image

BTREE構造のインデックス部

image

image

image

使用率の目安

RANDOM構造のプライム部やオーバフロー部、BTREE構造のデータ部やインデックス部における使用率(各ページの平均使用率)やRANDOM構造のオーバフロー率(総レコード数に対するオーバフロー部へのあふれ率)は、データのキー値およびデータの追加、削除の順番に依存して変動します。スペース量を見積もる場合は、それぞれの値に対して、以下のような目安値を使用して見積りを行います。

なお、ページ内レコード数が少ない場合、各使用率は低い値となり、オーバフロー率については高い値となります。

プライム部の使用率     : 0.4 〜 0.8
オーバフロー部の使用率   : 0.2 〜 0.5
オーバフロー率       : 0.2 〜 0.6(クラスタキーに一意性制約が
                     設定されている場合)
              : 0.9 〜 1.0(クラスタキーに一意性制約が
                     設定されていない場合)
BTREEデータ部の使用率    : 0.5
BTREEインデックス部の使用率 : 0.5

キー圧縮率の目安

BTREE構造のデータ部やインデックス部ではキーを圧縮して格納します。この場合のキー圧縮率は以下のような目安値を使用して見積りを行います。

BTREEデータ部のキー圧縮率    : 0.3
BTREEインデックス部のキー圧縮率 : 0.5

各格納構造のスペース量の見積

例1

SEQUENTIAL構造のスペース量の見積

次のような構造の発注表(総レコード数:30000件)の所要スペース量を計算します。

CREATE TABLE STOCKS.発注表 (
               取引先   SMALLINT  NOT NULL,
               取引製品  SMALLINT  NOT NULL,
               仕入価格  INTEGER,
               発注数量  SMALLINT
              )

格納構造:SEQUENTIAL構造

ページ長:32 Kバイト

安全率:1.3

レコード長     = ( 取引先 + 取引製品 + 仕入価格 + 発注数量 )
          + ( 可変長列の数 × 4 + 2 ) + 可変長列の長さ + ナルタグ数 + 26
          ≒ ( 2 + 2 + 4 + 2 ) + 0 + 0 + 2 + 26   (注1)
          = 38

ページ内レコード数 = ( ページ長 − 94 ) / レコード長
          = ( 32768 − 94 ) / 38
          = 859.8421053… 
          ≒ 859    (注2)

スペース量     = ( 総レコード数 / ページ内レコード数 + 1 ) × ページ長 × 安全率
          = ( 30000 / 859 + 1 ) × 32768 × 1.3
          = ( 35 + 1 ) × 32768 × 1.3    (注3)
          = 1533542.4 (バイト)
          ≒ 1498 (K バイト)
          → 1504 (K バイト)   (注4)

注1) 可変長列がないため、可変長に関する項はすべて0で計算

注2) 小数点切捨て

注3) 35は(30000/859)を小数点切上げで計算

注4) スペース量をページ長の整数倍に補正

 

例2

RANDOM構造のスペース量の見積

次のような構造の発注表(総レコード数:30000件)の所要スペース量を計算します。

CREATE TABLE STOCKS.発注表 (
               取引先   SMALLINT  NOT NULL,
               取引製品  SMALLINT  NOT NULL,
               仕入価格  INTEGER,
               発注数量  SMALLINT,
               PRIMARY KEY ( 取引先, 取引製品 )
              )

格納構造は、次のように設計します。また、クラスタキーはPRIMARY KEY(一意性制約が設定されている)であるため、計算式は、RANDOM構造(クラスタキーに一意性制約が設定されている場合)を使用します。

格納構造:取引先と取引製品をクラスタキーとしたRANDOM構造

ページ長:プライム部、オーバフロー部ともに4Kバイト

プライム部の使用率:0.5

オーバフロー部の使用率:0.2

オーバフロー率:0.2

安全率:1.3

レコード長     = ( 仕入価格 + 発注数量 ) + ( 可変長列の数 × 4 + 6 )
           + ( 取引先 + 取引製品 + 12 ) + ナルタグ数 + 26
          = ( 4 + 2 ) + ( 0 × 4 + 6 ) + ( 2 + 2 + 12 ) + 2 + 26
          = 56

ページ内レコード数 = ( ページ長 − 94 ) / レコード長  (注1)
          = ( 4096 − 94 ) / 56
          = 71.46428571…
          ≒ 71  (注2)

プライム部スペース量 
        = (( 総レコード数 / ページ内レコード数 ) / プライム部の使用率 + 1 )
         × プライム部のページ長
        = (( 30000 / 71 ) / 0.5 + 1 ) × 4096
        = ( 423 / 0.5 + 1 ) × 4096  (注3)
        = 3469312 (バイト)
        = 3388 (K バイト)
          [ページ数 = 3388 / 4 = 847
          2n ≧ 847 → n = 10 
          目安ページ数 = 210 + 1 = 1025]  (注4)
         = 1025×4k
         → 4100 (K バイト)

オーバフロー部スペース量
    = (( 総レコード数 × オーバフロー率 / ページ内レコード数 ) / オーバフロー部の使用率 + 1 )
     × オーバフロー部のページ長 × 安全率
    = (( 30000 × 0.2 / 71 ) / 0.2 + 1 ) × 4096 × 1.3 
    = ( 85 / 0.2 + 1 ) × 4096 × 1.3      (注5)
    = 2268364.8 (バイト)
    → 2216 (K バイト)       (注6)

注1) プライム部オーバフロー部ともにページ長が等しいためページ内レコード数も同じ

注2) 小数点切捨て

注3) 423は(30000/71)を小数点切上げで計算

注4) ページ数を2の巾乗化

注5) 85は(30000×0.2/71)を小数点切上げで計算

注6) スペース量をページ長の整数倍に補正

 

例3

OBJECT構造のスペース量の見積

次のような構造の製品写真(総レコード数:3000件)の所要スペース量を計算します。

CREATE TABLE STOCKS.製品写真 (
      製品番号  SMALLINT   PRIMARY KEY NOT NULL ,
      製品写真  BLOB( 500K ) NOT NULL)

格納構造:OBJECT構造

ページ長:32Kバイト

安全率:1.3

論理レコード長  = 製品番号 + 製品写真
         =   2   + 512000
         = 512002

格納レコード長  = ページ長 − 144
         = 32768 − 144
         = 32624

1 論理レコード
  必要ページ数 = 論理レコード長 / 格納レコード長
         =  512002 / 32624
         =  15.7
         ≒  16  (注)

スペース量
   = ( 1論理レコード必要ページ数 × 総レコード数 + 1 ) × ページ長 × 安全率
   = ( 16 × 3000 + 1 ) × 32768 × 1.3
   = ( 48001 ) × 32768 × 1.3
   = 1996841.6 (K バイト)
   ≒ 1950 (M バイト)

注) 小数点切上げ

 

例4

BTREE構造のスペース量の見積

次のような構造の発注表(SEQUENTIAL構造/総レコード数:30000件)に対して、仕入価格と発注数を2次キーとしてインデックスを付加する場合の所要スペース量を計算します。

CREATE TABLE STOCKS.発注表 (
               取引先   SMALLINT NOT NULL,
               取引製品 SMALLINT NOT NULL,
               仕入価格 INTEGER,
               発注数量 SMALLINT,
               PRIMARY KEY ( 取引先, 取引製品 )
              )

格納構造:仕入価格と発注数量を2次キーとしたBTREE構造

ページ長(データ部):16Kバイト

ページ長(インデックス部):2Kバイト

使用率(データ部):0.5

使用率(インデックス部):0.5

圧縮率(データ部):0.3

圧縮率(インデックス部):0.5

【データ部】

エントリ長      = ( 仕入価格 + 発注数量 ) × ( 1 − キー圧縮率 ) + 20
           = ( 4 + 2 ) × ( 1 − 0.3 ) + 20
           ≒ 25(注1)

セクション長     = エントリ長 × 10 + 2
           = 25 × 10 + 2
           = 252

ページ内セクション数 = ( データ部のページ長 − 110 ) / セクション長
           = ( 16384 − 110 ) / 252
           ≒ 64(注2)

ページ内エントリ数  = ( セクション長 / エントリ長 ) × ページ内セクション数 ×
              データ部の使用率
           = ( 252 / 25 ) × 64 × 0.5
           ≒ 10 × 64 × 0.5  (注3)
           = 320

データ部のページ数  = 表のレコード数 / ページ内エントリ数
           = 30000 / 320
           = 93.75
           ≒ 94(注1)

データ部のスペース量 = ( データ部のページ数 + 1 ) × データ部のページ長 × 安全率
           = ( 94 + 1 ) × 16384 × 1.3
           = 2023424 (バイト)
           = 1976 (K バイト)
           → 1984 (K バイト)(注4)

注1) 小数点切上げ

注2) 小数点切捨て

注3) (252/25)は小数点切捨て

注4) スペース量をページ長の整数倍に補正

 

【インデックス部】

エントリ長       = ( 仕入価格 + 発注数量 + 12 ) × ( 1 − キー圧縮率 ) + 10
            = ( 4 + 2 + 12 ) × ( 1 − 0.5 ) + 10
            = 19

セクション長      = エントリ長 × 10 + 2
            = 19 × 10 + 2
            = 192

ページ内セクション数  = ( インデックス部のページ長 − 110 ) / セクション長
            = ( 2048 − 110 ) / 192
            ≒ 10(注1)

ページ内エントリ数   = ( セクション長 / エントリ長 ) × ページ内セクション数 × 
              インデックス部の使用率
            = ( 192 / 19 ) × 10 × 0.5
            ≒ 10 × 10 × 0.5
            = 50(注2)

インデックスレベル   = L → 以下の条件を満たす値
                ( ページ内エントリ数 ) L ≧ データ部のページ数
                50L ≧ 94
            = 2

             インデックスレベル
インデックス部のページ数 =  Σ  ( データ部のページ数 / (ページ内エントリ数i ))
                i=1
               2 
             = Σ ( 94 /( 50i ))
               i=1 
             = ( 94 / 50 ) + ( 94 / 50 / 50 )
             ≒ 2 + 1(注3)
             = 3

インデックス部のスペース量
     = ( インデックス部のページ数 + 1 ) × インデックス部のページ長 × 安全率
     = ( 3 + 1 ) × 2048 × 1.3
     = 10649.6 (バイト)
     ≒ 11 (K バイト)
     → 12 (K バイト)(注4)

注1) 小数点切上げ

注2) (192/19)は小数点切捨て

注3) 小数点切上げ

注4) スペース量をページ長の整数倍に補正

 

列の長さの見積も

列のデータ属性

長さ(バイト)

固定長

CHARACTER(n)

n

NATIONAL CHARACTER(n)

n × 2

NUMERIC(p,q)

j    (注1)

DECIMAL(p,q)

j    (注1)

SMALLINT

2

INTEGER

4

REAL

4

DOUBLE PRECISION

8

TIMESTAMP

7

DATE

4

TIME

3

INTERVAL YEAR(p)
[ TO MONTH ]

m    (注2)
m+1   (注2)

INTERVAL MONTH(p)

m    (注2)

INTERVAL DAY(p)
[{ TO HOUR |
  TO MINUTE |
  TO SECOND }]

m    (注2)
m+1   (注2)
m+2   (注2)
m+3   (注2)

INTERVAL HOUR(p)
[{ TO MINUTE |
  TO SECOND }]

m    (注2)
m+1   (注2)
m+2   (注2)

INTERVAL MINUTE(p)
[ TO SECOND ]

m    (注2)
m+1   (注2)

INTERVAL SECOND(p)

m    (注2)

可変長

CHARACTER VARYING(n)

a    (注3)

NATIONAL CHARACTER VARYING(n)

a × 2 (注3)

BLOB(nk)

b × 1024 + 6(注4)

注1) jはpの値に依存して以下の値になります。

pの値(精度)

j

1 〜 2

1

3 〜 4

2

5 〜 6

3

7 〜 9

4

10 〜11

5

12 〜14

6

15 〜16

7

17 〜18

8

注2) mはpの値に依存して以下の値になります。

pの値

m

1 〜2

2

3 〜4

3

5 〜9

5

注3) aは平均文字数です。最大n文字となります。

注4) bは平均データ長(バイト)です。最大nキロバイトとなります。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2003