5.8.2 行の種別ごとの格納ページ数の求め方
ここでは,各表を格納するために必要な基本行用ページ数(変数BP(i)),および各表を格納するために必要な分岐行用ページ数(変数VP(i))の求め方について説明します。
(1) 基本行用ページ数(変数BP(i))の求め方
基本行用ページ数(変数BP(i))は,次に示す計算式から求めてください。変数BP(i)の分母の括弧部は1ページに格納される行数であり,最小1,最大255となります。
計算式
- 変数の説明
-
-
row_num
表に格納する行数(単位:個)
-
page_size
データ用DBエリアのページサイズ(単位:バイト)
-
pctfree
CREATE TABLE文のPCTFREEで指定する未使用領域の比率(単位:%)
未使用領域の比率を指定しない場合は,30%と仮定して計算してください。
カラムストア表にINSERT文またはUPDATE文で追加するデータの基本行用ページ数を求める場合は,0%と仮定して計算してください。
なお,pctfreeの値は,次に示す計算式を満たすように値を決めてください。
計算式(pctfreeの値)
-
CTRLSIZE
ローストア表の場合は56を指定してください。
カラムストア表にINSERT文またはUPDATE文で追加するデータの基本行用ページ数を求める場合は80を指定してください。
-
また,行長ROWSZは次に示す計算式から求めてください。非FIX表(表オプションBRANCH ALLの指定なし),非FIX表(表オプションBRANCH ALLの指定あり)およびFIX表で計算式が異なります。
カラムストア表にINSERT文またはUPDATE文で追加するデータの基本行用ページ数を求める場合には,「計算式(非FIX表で表オプションBRANCH ALLの指定なしの場合)」に従って求めてください。
計算式(非FIX表で表オプションBRANCH ALLの指定なしの場合)
計算式(非FIX表で表オプションBRANCH ALLの指定ありの場合)
計算式(FIX表の場合)
- 変数の説明
-
-
col_num
表の列の総数(単位:個)
-
col_size(i)
各列のデータ長(単位:バイト)
次に示す表を基に,各列のデータ長を求めてください。そのあとに,すべての列の合計を求めてください。
表5‒15 各データ型のデータ長の一覧 項番
分類
データ型
データ長(単位:バイト)
1
数データ
INTEGER
8
2
BIGINT
3
SMALLINT
4
4
DECIMAL(m,n)※
NUMERIC(m,n)※
1≦m≦4
2
5
5≦m≦8
4
6
9≦m≦16
8
7
17≦m≦38
16
8
DOUBLE PRECISION
8
9
FLOAT
10
文字データ
CHARACTER(n)
n
11
VARCHAR(n)
var_col_size
12
日時データ
DATE
4
13
TIME(p)
3+↑p÷2↑
14
TIMESTAMP(p)
7+↑p÷2↑
15
バイナリデータ
BINARY(n)
n
16
VARBINARY(n)
var_col_size
17
配列データ
ARRAY
11
- (凡例)
-
m,n:正の整数
p:0,3,6,9または12
- 注※
-
全体の桁数がm桁で,小数点以下の桁数がn桁の固定小数点数を示します。mを省略した場合は38が仮定されます。
- var_col_size:VARCHAR型およびVARBINARY型の列のデータ長
-
次に示す表を基にデータ長を求めてください。
表5‒16 VARCHAR型およびVARBINARY型の列のデータ長の一覧 項番
表オプション
BRANCH ALLの指定有無
列定義
BRANCHの指定
定義長n
(単位:バイト)
データ長
(単位:バイト)
1
指定あり
−
−
9
2
指定なし
YES
−
11
3
NO
1≦n≦255
d+2
4
256≦n≦32,000
d+3
5
AUTOまたは指定なし
1≦n≦255
d+2
6
256≦n≦32,000
11
- (凡例)
-
n:正の整数
d:実際のデータ長
−:該当しません。
-
(2) 分岐行用ページ数(変数VP(i))の求め方
分岐行用ページ数(変数VP(i))は,次に示す計算式から求めてください。
計算式
- 変数の説明
-
-
row_num
表に格納する行数(単位:個)
-
var_num
分岐行として管理される列の列数(単位:個)
次に示す列の数を求めてください。
表オプションBRANCH ALLの指定ありの場合
・VARCHAR型,およびVARBINARY型の列の数
表オプションBRANCH ALLの指定なしの場合
次のどれかに該当するVARCHAR型,およびVARBINARY型の列の数の合計
・列定義BRANCHにYESを指定した列
・定義長256バイト以上で列定義BRANCHにAUTOを指定した列
・定義長256バイト以上で列定義BRANCHを省略した列
-
page_size
データ用DBエリアのページサイズ(単位:バイト)
-
pctfree
CREATE TABLE文のPCTFREEで指定する未使用領域の比率(単位:%)
未使用領域の比率を指定しない場合は,30%と仮定して計算してください。
カラムストア表にINSERT文またはUPDATE文で追加するデータの分岐行用ページ数を求める場合は,0%と仮定して計算してください。
なお,pctfreeの値は,「(1) 基本行用ページ数(変数BP(i))の求め方」の変数「pctfree」を参照して,計算式を満たすように値を決定してください。
-
var_size
分岐行の列の平均データ長(単位:バイト)
次に示す表を基に求めてください。
表5‒17 分岐行となる列のデータ長の一覧 分類
データ型
データ長(単位:バイト)
文字データ
VARCHAR
d
バイナリデータ
VARBINARY
d
- (凡例)
-
d:実際のデータ長
-
CTRLSIZE
ローストア表の場合は56を指定してください。
カラムストア表にINSERT文またはUPDATE文で追加するデータの分岐行用ページ数を求める場合は80を指定してください。
-
(3) 配列型の列を定義した表の行長(変数ARRAY_ROWSZ)の求め方
配列型の列を定義した表の行長(変数ARRAY_ROWSZ)は,次に示す計算式から求めてください。
計算式
- 変数の説明
-
-
col_num
表の列の総数
-
page_size
データ用DBエリアのページサイズ(単位:バイト)
-
ARRAY_DICSIZE(k)
表のk番目に定義された列の圧縮用辞書のサイズ
次に示す計算式から求めてください。なお,列定義の圧縮方式指定に,NONE(データ圧縮なし),RUNLENGTH(ランレングス圧縮方式),DELTA(差分圧縮方式),またはDELTA_RUNLENGTH(差分ランレングス圧縮方式)を指定する列については,ARRAY_DICSIZE(k)は0になります。
計算式
-
elm_num(k)
表のk番目に定義した列の最大要素数(単位:個)
配列型以外の列の場合は,1としてください。
-
COLDATASIZE(k)
表のk番目に定義した列のデータ長(単位:バイト)
次に示す計算式で求めてください。
計算式
-
COLDATASIZE_NOBOUND(k)
配列型の列の要素データ型および定義長を基に,次に示す表から求めてください。
表5‒18 変数COLDATASIZE_NOBOUNDの値 項番
分類
要素データ型
COLDATASIZE_NOBOUNDの値(単位:バイト)
1
数データ
INTEGER
9
2
BIGINT
3
SMALLINT
5
4
DECIMAL(m,n)※
NUMERIC(m,n)※
m≦4
3
5
5≦m≦8
5
6
9≦m≦16
9
7
17≦m
17
8
DOUBLE PRECISION
9
9
FLOAT
10
文字データ
CHARACTER(n)
n≦127
n+1
11
128≦n
9
12
VARCHAR(n)
n≦127
n+2
13
128≦n≦255
129
14
256≦n
130
15
日時データ
DATE
5
16
TIME(p)
4+↑p÷2↑
17
TIMESTAMP(p)
8+↑p÷2↑
18
バイナリデータ
BINARY(n)
n≦127
n+1
19
128≦n
9
20
VARBINARY(n)
n≦127
n+2
21
128≦n≦255
129
22
256≦n
130
- (凡例)
-
m,n:正の整数
p:0,3,6,9または12
- 注※
-
全体の桁数がm桁で,小数点以下の桁数がn桁の固定小数点数を示します。mを省略した場合は38が仮定されます。
-
ARRAY_DATAPAGENUM
次の手順で求めてください。
■前提条件
-
ARRAY_DATAPAGENUMの初期値は1です。
-
列の定義順を示すkの初期値は1です。
-
変数については,変数ARRAY_DICSIZE(k)を参照してください。
■手順
-
free_sizeを求める
次の計算式で求めてください。
free_size = page_size - 56
-
k番目の列の次の値を求める
(COLDATASIZE(k)+8)×elm_num(k)
手順2.の値が「page_size - 56」(手順1.の値)を超える場合は,「page_size - 56」(手順1.の値)を手順2.の値としてください。
-
k番目の列の次の値を求める
手順1.の値 - 手順2.の値
-
手順3.の値を確認する
手順3.の値<0の場合
ARRAY_DATAPAGENUMに1を加算して,手順1.に戻って手順を繰り返してください。
0≦手順3.の値の場合
kに1を加算してください。
kが表に定義した列数を超えたら計算は完了です。超えていない場合は手順2.に戻って手順を繰り返してください。
-
-