17.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は「表17-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:各列のデータ長(バイト)
表17-1 データ長一覧」を参照して,すべての列について求めてください。
抽象データ型の列のデータ長については,「(4)抽象データ型の列のデータ長の求め方」を参照してください。
繰返し列のデータ長については,「(5)繰返し列のデータ長の求め方」を参照してください。
ei:列のデータ長の平均値(バイト)
f:表に定義する列の総数(個)
g:表を格納するRDエリアのセグメントサイズ(ページ)
h:CREATE TABLEで指定するセグメント内の空きページ比率(%)
セグメント内の空きページ比率を指定しない場合は,10%を仮定して計算します。ここでいう空きページとは,未使用ページのことです。
SPN1:分岐するとした列(BINARY以外)を格納するページ数
なお,分岐する条件については「表17-1 データ長一覧」の注※5で説明しています。
SPN1=
  f
 Σ↑分岐するとしたdiの値÷(b-61)↑×a×SF
 i=1
SPN2:分岐するとしたBINARY列を格納するページ数
なお,分岐する条件については「表17-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値への更新を大量に実行する場合

 

表17-1 データ長一覧

分類データ型及び条件データ長
(単位:バイト)
数値データINTEGER4
SMALLINT2
LARGE DECIMAL(m,n) 1↓m÷2↓
+12
FLOAT又はDOUBLE PRECISION8
SMALLFLT又はREAL4
文字データCHARACTER(n)n3
VARCHAR(n)d≦255繰返し列の要素d+2
上記以外d+1
d≧2566
VARCHAR(n)
ノースプリット
オプション
指定あり
n≦255抽象データ型の属性d+3
繰返し列の要素d+2
上記以外d+1
n≧256分岐する場合56
分岐しない場合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≧1286
NVARCHAR(n)
ノースプリット
オプション
指定あり
n≦127抽象データ型の属性2×d+3
繰返し列の要素2×d+2
上記以外2×d+1
n≧128分岐する場合56
分岐しない場合5抽象データ型の属性2×d+3
繰返し列の要素2×d+2
上記以外2×d+3
混在文字データMCHAR(n)n3
MVARCHAR(n)d≦255繰返し列の要素d+2
上記以外d+1
d≧2566
MVARCHAR(n)
ノースプリット
オプション
指定あり
n≦255抽象データ型の属性d+3
繰返し列の要素d+2
それ以外d+1
n≧256分岐する場合56
分岐しない場合5抽象データ型の属性d+3
繰返し列の要素d+2
上記以外d+3
日付データDATE4
時刻データTIME3
日間隔データINTERVAL YEAR TO DAY5
時間隔データINTERVAL HOUR TO SECOND4
時刻印データTIMESTAMP(n)7+(n÷2)
長大データBLOB9
バイナリデータBINARY(n)n≦255d+3
n≧256分岐する場合515
分岐しない場合5d+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を計算し直してください。


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

データ型データ長
(バイト)
VARCHAR(n)d≧256d+2
ノースプリットオプション指定あり0
NVARCHAR(n)d≧1282×d+2
ノースプリットオプション指定あり0
MVARCHAR(n)d≧256d+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を計算します。

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

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

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

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

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

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


データ型

条 件
データ長
attj
(バイト)
分岐部分の
データ長
attej(バイト)
VARCHAR(n)d≧2568d+2
ノースプリットオプション指定ありd+30
NVARCHAR(n)d≧12882×d+2
ノースプリットオプション指定あり2×d+30
MVARCHAR(n)d≧2568d+2
ノースプリットオプション指定ありd+30
d:実際のデータ長(文字数)

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

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

計算式
di=4+(eli+1)×eni
eli:繰返し列のデータ長
表17-1 データ長一覧」から求めてください。
ただし,可変長文字列型の場合は,「表17-4 可変長文字列型のデータ長一覧(繰返し列の場合)」から求めてください。
eni:繰返し列の平均要素数

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


データ型

条件
データ長
eli
(バイト)
分岐部分の
データ長
esj(バイト)
VARCHAR(n)d≧2565d+2
ノースプリットオプション指定ありd+20
NVARCHAR(n)d≧12852×d+2
ノースプリットオプション指定あり2×d+20
MVARCHAR(n)d≧2565d+2
ノースプリットオプション指定ありd+20
d:実際のデータ長(文字数)

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

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

m:表17-4の条件を満たす可変長文字列型の繰返し列数
esi:1要素当たりの実際のデータ長の平均値
表17-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掃除機C20200002615000
20190掃除機C772800010523000
20130冷蔵庫P10300007025000
20220テレビK18350001230000
20200掃除機C89350003030000
20140冷蔵庫P23350006030000
20280アンプL103800020033000
20150冷蔵庫P32480005043000
20290アンプL504980026045000
20230テレビK20500001545000
20160冷蔵庫P355580012050000
計算条件
  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. 表の格納ページ数の計算
[図データ]