次のような構造の発注表(総レコード数:30000件)の所要スペース量を計算します。
CREATE TABLE STOCKS.発注表 (
取引先 SMALLINT NOT NULL,
取引製品 SMALLINT NOT NULL,
仕入価格 INTEGER,
発注数量 SMALLINT
)格納構造: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) スペース量をページ長の整数倍に補正
次のような構造の発注表(総レコード数: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 ) + NULLタグ数 + 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) スペース量をページ長の整数倍に補正
次のような構造の製品写真(総レコード数: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 バイト)注) 小数点切上げ
次のような構造の発注表(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) スペース量をページ長の整数倍に補正