17.2.1 SQL文が使用する作業表用ファイルの容量
SQL文が使用する作業表用ファイルの容量は次に示す計算式で求めます。
- 計算式
SQL文が使用する作業表用ファイルの容量(単位:バイト)=MAX(a,b)×c
- a:1SQL文が使用する作業表用ファイルの容量の最大値
-
SQL文ごとに作業表用ファイルの容量を計算します。その中で最も大きい値をaに代入します。「1SQL文が使用する作業表用ファイルの容量の求め方」を参照して求めてください。
- b:ASSIGN LIST文が使用する作業表用ファイルの容量の最大値
-
ASSIGN LIST文ごとに作業表用ファイルの容量を計算します。その中で最も大きい値をbに代入します。「ASSIGN LIST文が使用する作業表用ファイルの容量の求め方」を参照して求めてください。
- c:pd_max_usersオペランドの値+pd_max_reflect_process_countオペランドの値
-
ただし,マルチフロントエンドサーバを使用している場合のバックエンドサーバでは,(pd_max_bes_processオペランドの値+pd_max_reflect_process_countオペランドの値)になります。
(1) 1SQL文が使用する作業表用ファイルの容量の求め方
1SQL文が使用する作業表用ファイルの容量は,次に示す計算式で求めます。
- 計算式
1SQL文が使用する作業表用ファイルの容量(単位:バイト)=a×b+c×d
a:列情報作業表の容量
b:列情報作業表の最大数
c:位置情報作業表の容量
d:位置情報作業表の最大数
(a) 列情報作業表の容量の求め方
列情報作業表の容量は次に示す計算式で求めます。
- 計算式
列情報作業表の容量(単位:バイト) =↑a÷MIN{↓(b−48)÷c↓ ,255 }↑×b×2
a:列情報作業表の行数(表「列情報作業表の行数の求め方」から求めてください)
b:作業表ページ長(計算式1から求めてください)
c:作業表の行長(計算式2から求めてください)
- 計算式1
-
-
pdworkに指定したHiRDBファイルシステム領域のセクタ長が4096の場合※1
作業表ページ長※2=↑(作業表の行長+48)÷4096↑×4096
-
pdworkに指定したHiRDBファイルシステム領域のセクタ長が4096ではない場合
作業表ページ長※2=MAX{↑(作業表の行長+48)÷2048↑×2048 ,4096 }
- 注※1 複数指定した場合,1つでもセクタ長が4096の領域がある場合は,
-
「セクタ長が4096の場合」の計算式を使用してください。
注※2 作業表ページ長は,32,768バイト以下でなければなりません。
-
- 計算式2
n 作業表の行長※= Σ Ai+2×n+6 i=1
Ai:作業表の各列のデータ長(表「作業表の各列のデータ長及び列数の求め方」から求めてください)
n:作業表の列数(表「作業表の各列のデータ長及び列数の求め方」から求めてください)
- 注※ 作業表の行長は,32,720バイト以下でなければなりません。
-
なお,LIMIT句指定時,(オフセット行数+LIMIT句に指定した行数)の値が32,768以上になる場合は,計算式2で算出した作業表の行長に12を加算してください。ただし,次の場合には12を加算する必要はありません。
-
検索対象の表にEXモードで排他が掛かっている場合
-
WITHOUT LOCKを指定した場合
-
グループ分け高速化機能を指定した場合
-
複数の表を結合する場合
表17‒2 列情報作業表の行数の求め方 SQL文
列情報作業表の行数
SELECT文
検索する個々の表から探索する行数の合計です。ただし,複数の表を結合していて結合結果行数の方が多い場合は,その行数となります。
-
CREATE INDEX
-
ALTER TABLE ADD PRIMARY KEY
表に格納している行数です。ただし,繰返し列に対するインデクスの場合は,インデクス構成列のうち一つの繰返し列の要素の総数となります。
表17‒3 作業表の各列のデータ長及び列数の求め方 SQL文
n
Ai
SELECT文
選択式に指定した列数+GROUP BY句に指定した列数※+ORDER BY句に指定した列数※+HAVING句に指定した列数※+FOR UPDATE句を指定した場合※は1
ただし,選択式にROWを指定している場合は表の全列数
左記の列ごとの実際の長さ
ただし,長大データ(BLOB),定義長が256バイト以上の文字データ(各国・混在文字データも含む),バイナリデータのうち,下記に属さない列又は位置情報列の場合は12
-
結合条件中に指定する列(結合列)
-
DISTINCT句指定の選択式
-
限定述語の副問合せ選択式中に指定する列
-
IN述語の副問合せ選択式中に指定する列
-
UNION [ALL] 又はEXCEPT [ALL] によって,集合演算対象となっている問合せ指定中の選択式
-
ORDER BY句に指定した列
-
CREATE INDEX
-
ALTER TABLE ADD PRIMARY KEY
1(インデクス情報列)+1(位置情報列)
-
インデクス情報列はインデクス構成列のデータ長の合計値
-
位置情報列は12
-
-
- 注 各列のデータ長については,次に示す表を参照してください。
- 注※
-
選択式に指定した列と同一の列の場合は,新たに加算する必要はありません。
(b) 列情報作業表の最大数の求め方
列情報作業表の最大数の求め方を次の表に示します。
SQL文 |
列情報作業表の最大数※1 |
---|---|
SELECT文 |
1. 〜10. の指定がない場合は,0になります。 1. 〜10. の指定がある場合は,対応する作業表増加数をすべて加算した値になります。
|
|
2 |
注※1 HiRDBが見積もるアクセスコストによっては作業表を作成しない場合があります。
注※2 HiRDB/パラレルサーバの場合にだけ該当します。
(c) 位置情報作業表の容量の求め方
位置情報作業表の容量は次に示す計算式で求めます。
- 計算式
位置情報作業表の容量(単位:バイト)=↑a÷184※↑×4096×2
注※ 探索条件にインデクス型プラグイン専用関数を指定する場合は155
- a:位置情報作業表の行数
-
位置情報作業表の行数の求め方を次に示します。
SQL文
位置情報作業表の行数の求め方
-
SELECT文
-
UPDATE文
-
DELETE文
探索時の条件中にインデクスを定義した列を含む述語が一つの場合,述語が真となる行数になります。二つ以上の場合,次の行数の合計値になります。
-
述語をOR論理演算している場合,少なくとも一つの述語が真となる行数の合計
-
述語をAND論理演算している場合,述語のうち真となる行数が多い方の行数として合算した行数
-
(d) 位置情報作業表の最大数の求め方
位置情報作業表の最大数の求め方を次の表に示します。
SQL文 |
位置情報作業表の最大数 |
---|---|
SELECT文 |
1〜4で,探索時に使用するインデクス数+1になります。 |
|
探索条件中にインデクスを定義した列がある場合,探索時に使用するインデクス数+1になります。 |
注※ HiRDB/シングルサーバの場合にだけ該当します。
(2) ASSIGN LIST文が使用する作業表用ファイルの容量の求め方
ASSIGN LIST文が使用する作業表用ファイルの容量は,次に示す計算式で求めます。
- 計算式
ASSIGN LIST文が使用する作業表用ファイルの容量(単位:バイト)= n Σ(Bi×2) i=1
n:ASSIGN LIST文の探索条件中の述語の数
- Bi:探索条件中のi番目の述語を処理する作業表の容量。次に示す計算式で求めます。
-
Bi=↑リストの基になる表でi番目の述語が真となる行数※÷504↑×4096
×1.5(単位:バイト)
注※ 述語が繰返し列に対する条件の場合,真となる要素の総数となります。