スケーラブルデータベースサーバ HiRDB Version 8 システム導入・設計ガイド(Windows(R)用)

[目次][索引][前へ][次へ]

16.1.2 表の格納ページ数の計算方法

CREATE TABLEでFIX指定をするかどうかによって,表の格納ページ数の計算方法が異なります。それぞれの計算方法を(1)(2)に説明します。(1)及び(2)の計算式中で使用する変数については,(3)で説明しています。表の格納ページ数の計算例については,(7)で説明しています。また,リバランス機能を使用する場合のRDエリア容量見積もりを(6)で説明しています。

なお,表を横分割する場合,格納RDエリアごとにページ数を求めてください。

<この項の構成>
(1) FIX指定がない場合
(2) FIX指定がある場合
(3) 計算式中で使用する変数
(4) 抽象データ型の列のデータ長の求め方
(5) 繰返し列のデータ長の求め方
(6) リバランス機能を使用する場合のエリア容量見積もり
(7) 表の格納ページ数の計算例

(1) FIX指定がない場合

FIX指定がない場合の表の格納ページ数は,次に示す計算式で求めます。

計算式

表の格納ページ数=
 分岐するとしたBINARY列以外を格納するページ数
+分岐するとしたBINARY列を格納するページ数    (単位:ページ)
・分岐するとしたBINARY列以外を格納するページ数

[図データ]

・分岐するとしたBINARY列を格納するページ数
SPN2
(a) Pの求め方

Pの求め方を次に示します。なお,Pの分母の括弧部は1ページに格納される行数であり,最小1,最大255とします。

[図データ]

(b) PSiの求め方

PSiの求め方を次に示します。次に示す計算式で各PSiを計算し,その総和を求めてください。なお,nは「表16-2 可変長文字列型のデータ長一覧(抽象データ型及び繰返し列を除く)」に該当する列の数を示しています。

PSi=a×↑ei÷(b−62)↑

(2) FIX指定がある場合

FIX指定がある場合の表の格納ページ数は,次に示す計算式で求めます。

計算式

[図データ]

(a) Qの求め方

Qの求め方を次に示します。なお,Qの分母の括弧部は1ページに格納される行数であり,最小1,最大255とします。

[図データ]

(3) 計算式中で使用する変数

a:表に格納する行の総数(件)

b:ユーザ用RDエリアのページ長(バイト)

c:CREATE TABLEで指定する未使用領域の比率(%)
未使用領域の比率を指定しない場合は,30%を仮定して計算します。

di:各列のデータ長(バイト)
表16-1 データ長一覧」を参照して,すべての列について求めてください。
抽象データ型の列のデータ長については,「(4)抽象データ型の列のデータ長の求め方」を参照してください。
繰返し列のデータ長については,「(5)繰返し列のデータ長の求め方」を参照してください。

ei:列のデータ長の平均値(バイト)

f:表に定義する列の総数(個)

g:表を格納するRDエリアのセグメントサイズ(ページ)

h:CREATE TABLEで指定するセグメント内の空きページ比率(%)
セグメント内の空きページ比率を指定しない場合は,10%を仮定して計算します。ここでいう空きページとは,未使用ページのことです。

SPN1:分岐するとした列(BINARY以外)を格納するページ数
なお,分岐する条件については「表16-1 データ長一覧」の注※5で説明しています。
SPN1=
  f
 Σ↑分岐するとしたdiの値÷(b−61)↑×a×SF
 i=1

SPN2:分岐するとしたBINARY列を格納するページ数
なお,分岐する条件については「表16-1 データ長一覧」の注※5で説明しています。
SPN2=SPN2A+SPN2B+SPN2C
 
・INSERT SQLによる分岐ページ数
 SPN2A=
   f
 {Σ↓分岐するとしたdiの値÷(b−59)↓×a+A}×SF
  i=1
・pdload又はpdrorgによる分岐ページ数
 分岐するとしたdiの値>(b−2853)÷255 のとき
 SPN2B=
    f
 ↑{Σ(分岐するとしたdiの値+11)×a}÷(b−48)↑×SF
   i=1
 分岐するとしたdiの値≦(b−2853)÷255 のとき
 SPN2C=
 ↑a÷255↑×SF
Aの計算式を次に示します。
[図データ]
f:分岐するとした列の数
SF:1.3
ただし,次に示す場合は1.3より大きくしてください。
  • 抽象データ型の列を大量に更新する場合
  • 繰返し列に対して要素のデータ長が大きくなる更新又は要素数が増える更新を大量に実行する場合
  • VARCHAR,NVARCHAR,MVARCHAR,又はBINARY型の列に対してデータ長が大きくなる更新を大量に実行する場合
  • BINARY型の列に,データ長が大きくなる更新を大量に実行する場合
  • 列ごとのデータ抑制が実行された列に対して,データ長が大きくなる更新を大量に実行する場合
  • 前記以外のデータ型で,NULL値から非NULL値への更新を大量に実行する場合
 

表16-1 データ長一覧

分類 データ型及び条件 データ長
(単位:バイト)
数値データ INTEGER 4
SMALLINT 2
LARGE DECIMAL(m,n) 1 ↓m÷2↓
+12
FLOAT又はDOUBLE PRECISION 8
SMALLFLT又はREAL 4
文字データ CHARACTER(n) n3
VARCHAR(n) d≦255 繰返し列の要素 d+2
上記以外 d+1
d≧256 6
VARCHAR(n)
ノースプリット
オプション
指定あり
n≦255 抽象データ型の属性 d+3
繰返し列の要素 d+2
上記以外 d+1
n≧256 分岐する場合5 6
分岐しない場合5 抽象データ型の属性 d+3
繰返し列の要素 d+2
上記以外 d+3
各国文字データ NCHAR(n)又はNATIONAL CHARACTER(n) 2×n 4
NVARCHAR(n) d≦127 繰返し列の要素 2×d+2
上記以外 2×d+1
d≧128 6
NVARCHAR(n)
ノースプリット
オプション
指定あり
n≦127 抽象データ型の属性 2×d+3
繰返し列の要素 2×d+2
上記以外 2×d+1
n≧128 分岐する場合5 6
分岐しない場合5 抽象データ型の属性 2×d+3
繰返し列の要素 2×d+2
上記以外 2×d+3
混在文字データ MCHAR(n) n3
MVARCHAR(n) d≦255 繰返し列の要素 d+2
上記以外 d+1
d≧256 6
MVARCHAR(n)
ノースプリット
オプション
指定あり
n≦255 抽象データ型の属性 d+3
繰返し列の要素 d+2
それ以外 d+1
n≧256 分岐する場合5 6
分岐しない場合5 抽象データ型の属性 d+3
繰返し列の要素 d+2
上記以外 d+3
日付データ DATE 4
時刻データ TIME 3
日間隔データ INTERVAL YEAR TO DAY 5
時間隔データ INTERVAL HOUR TO SECOND 4
時刻印データ TIMESTAMP(n) 7+(n÷2)
長大データ BLOB 9
バイナリデータ BINARY(n) n≦255 d+3
n≧256 分岐する場合5 15
分岐しない場合5 d+3

d:実際のデータ長(文字数)

m,n:正の整数

注※1
全体のけた数がmけたで,小数点以下のけた数がnけたの固定小数点数です。mを省略した場合は15を仮定します。

注※2
表定義時に表オプションにSUPPRESS DECIMALを指定した場合,データ長は「↓k÷2↓+2」になります。kは,格納時の有効けた数(先頭の0の部分を除いたけた数)を示します。なお,次に示す場合はSUPPRESS DECIMALを使用しないでください。計算式中のaは,SUPPRESS DECIMAL又は列データ抑制指定を使用しない場合の,表中の列のデータ長の合計値です。
32717<(a+表中の列数×2+8)

注※3
列データ抑制指定をして,データ抑制された場合,nは「n−b+4」になります。なお,データ抑制は,列データ抑制指定時,列データの最後の文字が空白の場合,その最後の文字と連続している半角の空白が4文字以上あるときだけ実行されます。bは,列データの最後の文字と連続している空白の数を示します。
ただし,列データ抑制指定をして,データ抑制されなかった場合は,列ごとに1バイトの付加情報が追加されます。
なお,次に示す場合は列データ抑制指定を使用しないでください。計算式中のaは,SUPPRESS DECIMAL又は列データ抑制指定を使用しない場合の,表中の列のデータ長の合計値です。
32717<(a+表中の列数×2+8)

注※4
列データ抑制指定をして,データ抑制された場合,2×nは「2×n−2×b+5」になります。なお,データ抑制は,列データ抑制指定時,列データの最後の文字が空白の場合,その最後の文字と連続している全角の空白が3文字以上あるときだけ実行されます。bは,列データの最後の文字と連続している空白の数を示します。
ただし,列データ抑制指定をして,データ抑制されなかった場合は,列ごとに1バイトの付加情報が追加されます。
なお,次に示す場合は列データ抑制指定を使用しないでください。計算式中のaは,SUPPRESS DECIMAL又は列データ抑制指定を使用しない場合の,表中の列のデータ長の合計値です。
32717<(a+表中の列数×2+8)

注※5
通常は分岐しない場合で計算します。次に示す計算式が成立する場合に分岐します。

BL>ページ長−50
         f
BL(バイト)=Σ di+2×f+6
        i=1

この分岐条件が成立した場合は,分岐しないとした列を列番号の小さい方から分岐条件が成立しなくなるまで分岐するとしてBLを計算し直してください。


表16-2 可変長文字列型のデータ長一覧(抽象データ型及び繰返し列を除く)

データ型 データ長
(バイト)
VARCHAR(n) d≧256 d+2
ノースプリットオプション指定あり 0
NVARCHAR(n) d≧128 2×d+2
ノースプリットオプション指定あり 0
MVARCHAR(n) d≧256 d+2
ノースプリットオプション指定あり 0

d:実際のデータ長(文字数)

(4) 抽象データ型の列のデータ長の求め方

抽象データ型の列のデータ長diは,次に示す計算式で求めます。

計算式
    h
di= Σ ADTk+5
    k=1

h:抽象データ型の継承の数(個)
継承なしの場合は1
CREATE TYPE文でUNDERオペランドを指定して別の抽象データ型を継承した場合,最も上位の抽象データ型をh番目,最も下位の抽象データ型を1番目としてください。

ADTk:抽象データ型のデータ長(バイト)
次に示す計算式で求めてください。
      m
ADTk= Σ attj+10+2×m 
     i=1

m:抽象データ型の全属性数(個)

attj:抽象データ型の各属性のデータ長(バイト)
継承がない場合は,m=1であり,ADT1を計算します。

各属性のデータ長については,「表16-1 データ長一覧」を参照してください。ただし,データ型が「表16-3 可変長文字列型のデータ長一覧(抽象データ型の場合)」で示す条件を満たしている場合は,表16-3に従ってデータ長を計算してください。

また,対応するattejの値を次に示す計算式に代入して,分岐行格納ページ数ADTLSをPに加算してください。

       h
ADTLS= Σ ↑attej÷(b−62)↑×a
      i=1

属性が抽象データ型で定義されている場合は,次に示す計算式で属性のデータ長を求めてください。

           h
attj(バイト)= Σ ADTk+5
          k=1

表16-3 可変長文字列型のデータ長一覧(抽象データ型の場合)


データ型

条 件
データ長
attj
(バイト)
分岐部分の
データ長
attej(バイト)
VARCHAR(n) d≧256 8 d+2
ノースプリットオプション指定あり d+3 0
NVARCHAR(n) d≧128 8 2×d+2
ノースプリットオプション指定あり 2×d+3 0
MVARCHAR(n) d≧256 8 d+2
ノースプリットオプション指定あり d+3 0

d:実際のデータ長(文字数)

(5) 繰返し列のデータ長の求め方

繰返し列のデータ長は,次に示す計算式で求めます。

計算式

di=4+(eli+1)×eni

eli:繰返し列のデータ長
表16-1 データ長一覧」から求めてください。
ただし,可変長文字列型の場合は,「表16-4 可変長文字列型のデータ長一覧(繰返し列の場合)」から求めてください。

eni:繰返し列の平均要素数

表16-4 可変長文字列型のデータ長一覧(繰返し列の場合)


データ型

条件
データ長
eli
(バイト)
分岐部分の
データ長
esj(バイト)
VARCHAR(n) d≧256 5 d+2
ノースプリットオプション指定あり d+2 0
NVARCHAR(n) d≧128 5 2×d+2
ノースプリットオプション指定あり 2×d+2 0
MVARCHAR(n) d≧256 5 d+2
ノースプリットオプション指定あり d+2 0

d:実際のデータ長(文字数)

可変長文字列型の繰返し列で,eliの値が表16-4の条件を満たす列について,次に示す計算式の値をPに加算してください。

 m
↑Σ{ esi×eni+14×(eni−1)}÷(b−62)↑×a
 i=1

m:表16-4の条件を満たす可変長文字列型の繰返し列数

esi:1要素当たりの実際のデータ長の平均値
表16-2 可変長文字列型のデータ長一覧(抽象データ型及び繰返し列を除く)」に示したデータ長を適用します。

(6) リバランス機能を使用する場合のエリア容量見積もり

ハッシュ関数HASHA,HASHB,HASHC,HASHD,HASHE,HASHFを使用した分割表の場合,データは1,024個のハッシュ要素値に分けられ,値ごとに別々のセグメントに格納されます。

各分割RDエリアには,平均(1024÷分割数)のハッシュ要素数のデータが格納されます。このため,各RDエリアには,少なくともそのRDエリアに格納される要素数分のセグメントを割り当てる必要があります。

リバランス機能を使用する場合のRDエリア容量は次のように見積もります。

  1. データ件数N,行長L,ページ長Pから,必要な総セグメント数Snを見積もります。
  2. RDエリア当たりに必要なセグメント数Ssnを見積もります。
    Ssn=↑Sn÷Srn↑×Srn
    Srn:↑1024÷Dvn↑
    Dvn:RDエリア分割数
  3. 余裕値を考慮して,RDエリア当たりの使用中セグメント数Sを見積もります。
    S=↑(Ssn×K)÷Srn↑×Srn
    K:係数(例:余裕率20%の場合,1.2)

(7) 表の格納ページ数の計算例

(a) 例題

次に示す在庫表の表格納ページ数を求めます。

品番 商品名 規格 単価 数量 原価
20180 掃除機 C20 20000 26 15000
20190 掃除機 C77 28000 105 23000
20130 冷蔵庫 P10 30000 70 25000
20220 テレビ K18 35000 12 30000
20200 掃除機 C89 35000 30 30000
20140 冷蔵庫 P23 35000 60 30000
20280 アンプ L10 38000 200 33000
20150 冷蔵庫 P32 48000 50 43000
20290 アンプ L50 49800 260 45000
20230 テレビ K20 50000 15 45000
20160 冷蔵庫 P35 55800 120 50000

計算条件
  1. 表に格納する行の総数:10000件
  2. ユーザ用RDエリアのページ長:8192バイト
  3. CREATE TABLEで指定する未使用領域の比率:30%
  4. 列数:6列
  5. 表を格納するRDエリアのセグメントサイズ:100ページ
  6. CREATE TABLEで指定するセグメント内の空きページ比率:40%
  7. 列のデータ型:次に示します。
    品番:CHARACTER(5)
    商品名:NCHAR(4)
    規格:CHARACTER(3)
    単価:INTEGER
    数量:INTEGER
    原価:INTEGER

FIX指定がない場合
1. 行長の計算
5(品番)+2×4(商品名)+3(規格)+4(単価)+4(数量)+4(原価)=28バイト
2. Pの計算
[図データ]
3. 表の格納ページ数の計算
[図データ]

FIX指定がある場合
1. 行長の計算
5(品番)+2×4(商品名)+3(規格)+4(単価)+4(数量)+4(原価)=28バイト
2. Qの計算
[図データ]
3. 表の格納ページ数の計算
[図データ]