ページの先頭行へ戻る
PRIMEFLEX for HA Database 業務開発ガイド(Native SQL編)
FUJITSU Integrated System

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

例1

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

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

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

格納構造:SEQUENTIAL構造

ページ長:32 Kバイト

CPUコア数:2

安全率:1.3

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

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

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

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

注2) 小数点切捨て

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

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


例2

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

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

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

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

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

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

使用率(データ部):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 ) / セクション長
                      = ( 8192 - 110 ) / 252
                      ≒ 32                                                    (注2)

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

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

データ部のスペース量  = ( データ部のページ数 + 1 ) × データ部のページ長 × 安全率
                      = ( 188 + 1 ) × 8192 × 1.3
                      = 2012774 (バイト)
                      = 1965 (K バイト)
                      → 1968 (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 ) / セクション長
                         = ( 8192 - 110 ) / 192
                         ≒ 42                                                    (注1)

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

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

                          インデックスレベル
インデックス部のページ数 = Σ ( データ部のページ数 / (ページ内エントリ数i )) i=1
1
= Σ ( 188 /( 210i )) i=1
= ( 188 / 210 ) ≒ 1 (注3) インデックス部のスペース量 = ( インデックス部のページ数 + 1 ) × インデックス部のページ長 × 安全率 = ( 1 + 1 ) × 8192 × 1.3 = 21299.2 (バイト) ≒ 21 (K バイト) → 24 (K バイト) (注4)

注1) 小数点切上げ

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

注3) 小数点切上げ

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