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

第4章 格納構造> 4.4 データベーススペースの所要量の見積り

4.4.2 見積り例

各格納構造のスペース量の見積りを以下に示します。

例1

STRIPE構造およびSEQUENTIAL構造のスペース量の見積

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

CREATE TABLE STOCKS.発注表 (                                 
                              取引先     SMALLINT   NOT NULL,
                              取引製品   SMALLINT   NOT NULL,
                              仕入価格   INTEGER,            
                              発注数量   SMALLINT            
                            )                                
格納構造:
STRIPE構造およびSEQUENTIAL構造
ページ長:
32 キロバイト
安全率:
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構造
ページ長:
プライム部、オーバフロー部ともに4キロバイト
プライム部の使用率:
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

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

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

CREATE TABLE STOCKS.発注表 (                                    
                              取引先     SMALLINT   NOT NULL,   
                              取引製品   SMALLINT   NOT NULL,   
                              仕入価格   INTEGER,               
                              発注数量   SMALLINT,              
                              PRIMARY KEY ( 取引先, 取引製品 )  
                            )                                   
格納構造:
仕入価格と発注数量を2次キーとしたBTREE構造
ページ長(データ部):
16キロバイト
ページ長(インデックス部):
2キロバイト
使用率(データ部):
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 ≧ データ部のページ数 
                                ( 50 )L ≧ 94 
                     = 2 

インデックス部の     インデックスレベル 
            ページ数 = Σ ( データ部のページ数 / ページ内エントリ数 ) 
                        i=1 

                         2 
                     = Σ ( 94 / 50 ) 
                        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) スペース量をページ長の整数倍に補正

例4

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

次のような構造の発注表(STRIPE構造/総レコード数:30000件)に対して、取引先と取引製品をPRIMARY KEYとしてインデックスを付加する場合の所要スペース量を計算します。

CREATE TABLE STOCKS.発注表 (                                  
                              取引先     SMALLINT   NOT NULL, 
                              取引製品   SMALLINT   NOT NULL, 
                              仕入価格   INTEGER,             
                              発注数量   SMALLINT,            
                              PRIMARY KEY ( 取引先, 取引製品 )
                            )                                 
格納構造:
取引先と取引製品をPRIMARY KEYとしたHASH構造
ページ長(データ部):
16キロバイト
ページ長(インデックス部):
2キロバイト
使用率(データ部):
0.5
使用率(インデックス部):
0.5
圧縮率(データ部):
0.3
圧縮率(インデックス部):
0.5
【データ部】 

エントリ長           = ( 取引先 + 取引製品 ) ×( 1 - キー圧縮率 ) + 20 
                     = ( 2 + 2 ) × ( 1 - 0.3 ) + 20 
                     ≒ 23 (注1) 

セクション長         = エントリ長 × 10 + 2 
                     = 23 × 10 + 2 
                     = 232 

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

ページ内エントリ数   = ( セクション長 / エントリ長 ) × ページ内セクション数 
                        × データ部の使用率 
                     = ( 232 / 23 ) × 70 × 0.5 
                     ≒ 10 × 70 × 0.5 (注3) 
                     = 350 

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

データ部のスペース量 = ( データ部のページ数 + 1 ) × データ部のページ長 × 安全率 
                     = ( 86 + 1 ) × 16384 × 1.3 
                     = 1853030.4(バイト) 
                     = 1809.6(K バイト) 
                     → 1824 (K バイト) (注4) 

注1) 小数点切上げ

注2) 小数点切捨て

注3) 10は(232/23)を小数点切捨てで計算

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

【インデックス部】 

エントリ長           = ( 取引先 + 取引製品 + 12 ) × ( 1 - キー圧縮率 ) + 10 
                     = ( 2 + 2 + 12 ) × ( 1 - 0.5 ) + 10 
                     = 18 

セクション長         = エントリ長 ×10 + 2 
                     = 18 × 10 + 2 
                     = 182 

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

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

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

インデックス部の     インデックスレベル 
            ページ数 = Σ ( データ部のページ数 / (ページ内エントリ数i)) 
                        i=1 

                         2 
                     = Σ ( 86 / (55i)) 
                        i=1 
                     = ( 86 / 55 ) + ( 86 / 55 / 55 ) 
                     ≒ 2 + 0     (注3) 
                     = 2 

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

注1) 小数点切上げ

注2) 10は(182/18)を小数点切捨てで計算

注3) 小数点切上げ

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


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

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