Hitachi

ノンストップデータベース HiRDB Version 10 システム導入・設計ガイド(UNIX(R)用)


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

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

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

〈この項の構成〉

(1) FIX指定がない場合

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

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

・分岐するとしたBINARY列以外を格納するページ数

[図データ]

・分岐するとしたBINARY列を格納するページ数

SPN2

(a) Pの求め方

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

[図データ]

(b) PSiの求め方

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

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

(2) FIX指定がある場合

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

計算式

[図データ]

(a) Qの求め方

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

[図データ]

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

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

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

c:CREATE TABLEで指定する未使用領域の比率(%)

未使用領域の比率を指定しない場合は,30%を仮定して計算します。

di:各列のデータ長(バイト)

表「データ長一覧」を参照して,すべての列について求めてください。

抽象データ型の列のデータ長については,「抽象データ型の列のデータ長の求め方」を参照してください。

繰返し列のデータ長については,「繰返し列のデータ長の求め方」を参照してください。

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

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

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

h:CREATE TABLEで指定するセグメント内の空きページ比率(%)

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

Z:次に示すどちらかを代入します。
  • pd_dbreuse_remaining_entriesオペランドの指定値がALL,又は,ONLY_USERの場合:0

  • pd_dbreuse_remaining_entriesオペランドの指定値が上記以外の場合:510

SPN1:分岐するとした列(BINARY以外)を格納するページ数

なお,分岐する条件については表「データ長一覧」の注※5で説明しています。

SPN1=
  f
 Σ↑分岐するとしたdiの値÷(b−61)↑×a×SF
 i=1
SPN2:分岐するとしたBINARY列を格納するページ数

なお,分岐する条件については表「データ長一覧」の注※5で説明しています。

SPN2=SPN2A+SPN2B+SPN2C
 
・INSERT SQLによる分岐ページ数
 分岐するとしたBINARY列について計算します。
 SPN2A=
   k
 {Σ↓Li÷(b−59)↓×a+A}×SF
  i=1
 
・pdload又はpdrorgによる分岐ページ数
 Li>(b−2853)÷255 のとき
 SPN2B=
    k
 ↑{Σ(Li+11)×a}÷(b−48)↑×SF
   i=1
 Li≦(b−2853)÷255 のとき
 SPN2C=
 ↑a÷255↑×SF

Aの計算式を次に示します。

[図データ]

k:分岐するとした列の数

Li:各列の実際のデータ長(バイト)

圧縮列の場合は次の計算式の値になります。

圧縮後のデータ長+(↑圧縮前のデータ長÷圧縮分割サイズ↑)×8

SF:1.3

ただし,次に示す場合は1.3より大きくしてください。

  • 抽象データ型の列を大量に更新する場合

  • 繰返し列に対して要素のデータ長が大きくなる更新又は要素数が増える更新を大量に実行する場合

  • VARCHAR,NVARCHAR,MVARCHAR,又はBINARY型の列に対してデータ長が大きくなる更新を大量に実行する場合

  • BINARY型の列に,データ長が大きくなる更新を大量に実行する場合

  • 列ごとのデータ抑制が実行された列に対して,データ長が大きくなる更新を大量に実行する場合

  • 前記以外のデータ型で,NULL値から非NULL値への更新を大量に実行する場合

表15‒1 データ長一覧

分類

データ型及び条件

データ長

(単位:バイト)

数値データ

INTEGER

4

SMALLINT

2

LARGE DECIMAL(m,n) ※1

↓m÷2↓

+1※2

FLOAT又はDOUBLE PRECISION

8

SMALLFLT又はREAL

4

文字データ

CHARACTER(n)

n※3

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)

n※3

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

BINARY(n)

圧縮指定あり

分岐する場合※5

15

分岐しない場合※5

γ+9

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を計算し直してください。

表15‒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を計算します。

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

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

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

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

           h
attj(バイト)= Σ ADTk+5
          k=1
表15‒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:繰返し列のデータ長

表「データ長一覧」から求めてください。

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

eni:繰返し列の平均要素数
表15‒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の値が表「可変長文字列型のデータ長一覧(繰返し列の場合)」の条件を満たす列について,次に示す計算式の値をPに加算してください。

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

m:表「可変長文字列型のデータ長一覧(繰返し列の場合)」の条件を満たす可変長文字列型の繰返し列数

esi:1要素当たりの実際のデータ長の平均値

表「可変長文字列型のデータ長一覧(抽象データ型及び繰返し列を除く)」に示したデータ長を適用します。

(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

  8. システム共通定義pd_dbreuse_remaining_entriesオペランドを指定していない

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. 表の格納ページ数の計算

[図データ]