Hitachi

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


18.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_bes_processオペランドの値になります。

〈この項の構成〉

(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
作業表ページ長=MAX{↑(作業表の行長+48)÷2048↑×2048 ,4096 }

注※ 作業表ページ長は,32,768バイト以下でなければなりません。

計算式2
         n 
作業表の行長= Σ Ai+2×n+6
        i=1

Ai:作業表の各列のデータ長(表「作業表の各列のデータ長及び列数の求め方」から求めてください)

n:作業表の列数(表「作業表の各列のデータ長及び列数の求め方」から求めてください)

注※ 作業表の行長は,32,720バイト以下でなければなりません。

なお,LIMIT句指定時,(オフセット行数+LIMIT句に指定した行数)の値が32,768以上になる場合は,計算式2で算出した作業表の行長に12を加算してください。ただし,次の場合には12を加算する必要はありません。

  • 検索対象の表にEXモードで排他が掛かっている場合

  • WITHOUT LOCKを指定した場合

  • グループ分け高速化機能を指定した場合

  • 複数の表を結合する場合

    表18‒2 列情報作業表の行数の求め方

    SQL文

    列情報作業表の行数

    SELECT文

    検索する個々の表から探索する行数の合計です。ただし,複数の表を結合していて結合結果行数の方が多い場合は,その行数となります。

    • CREATE INDEX

    • ALTER TABLE ADD PRIMARY KEY

    表に格納している行数です。ただし,繰返し列に対するインデクスの場合は,インデクス構成列のうち一つの繰返し列の要素の総数となります。

    表18‒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) 列情報作業表の最大数の求め方

列情報作業表の最大数の求め方を次の表に示します。

表18‒4 列情報作業表の最大数の求め方

SQL文

列情報作業表の最大数※1

SELECT文

1. 〜10. の指定がない場合は,0になります。

1. 〜10. の指定がある場合は,対応する作業表増加数をすべて加算した値になります。

  1. 複数の表を結合して検索する場合

    作業表増加数(HiRDB/シングルサーバの場合)=結合表数+1

    作業表増加数(HiRDB/パラレルサーバの場合)=結合表数×2

    ただし,結合キーとなる列にインデクスがあり,制限条件がある場合は0

  2. ORDER BY句を指定する場合

    作業表増加数=2

    ORDER BY句に指定した列をすべて含むインデクスを検索に使用する場合=0

  3. GROUP BY句を指定しないで,選択式中に集合関数を含む値式を指定する場合※2

    作業表増加数=1

  4. GROUP BY句を指定する場合

    作業表増加数=GROUP BY句指定数×2

  5. DISTINCT句を指定する場合

    作業表増加数=DISTINCT句指定数×2

  6. UNION[ALL]句又はEXCEPT[ALL]句を指定する場合

    作業表増加数(HiRDB/シングルサーバの場合)=UNION[ALL]句又はEXCEPT[ALL]句指定数+2

    作業表増加数(HiRDB/パラレルサーバの場合)=(UNION[ALL]句又はEXCEPT[ALL]句指定数+1)×2

  7. FOR UPDATE句を指定するか又はこのカーソルを使用した更新があり,インデクスを定義した列に検索条件を指定する場合※2

    作業表増加数=2

  8. FOR READ ONLY句を指定する場合

    作業表増加数=1

  9. 副問合せ(限定述語)を指定する場合

    増加作業表数=副問合せ指定数+(インデクスを定義した列に対する=ANYの限定述語の数)+(インデクスを定義した列に対するIN述語の副問合せ指定数)+(インデクスを定義した列に対する=SOMEの限定述語の数)

  10. 選択式にウィンドウ関数COUNT(*) OVER()を指定する場合

    増加作業表数=選択式にウィンドウ関数を指定した問合せ指定数

  • CREATE INDEX

  • ALTER TABLE ADD PRIMARY KEY

2

注※1 HiRDBが見積もるアクセスコストによっては作業表を作成しない場合があります。

注※2 HiRDB/パラレルサーバの場合にだけ該当します。

(c) 位置情報作業表の容量の求め方

位置情報作業表の容量は次に示す計算式で求めます。

計算式
位置情報作業表の容量(単位:バイト)=↑a÷184↑×4096×2

注※ 探索条件にインデクス型プラグイン専用関数を指定する場合は155

a:位置情報作業表の行数

位置情報作業表の行数の求め方を次に示します。

SQL文

位置情報作業表の行数の求め方

  • SELECT文

  • UPDATE文

  • DELETE文

探索時の条件中にインデクスを定義した列を含む述語が一つの場合,述語が真となる行数になります。二つ以上の場合,次の行数の合計値になります。

  • 述語をOR論理演算している場合,少なくとも一つの述語が真となる行数の合計

  • 述語をAND論理演算している場合,述語のうち真となる行数が多い方の行数として合算した行数

(d) 位置情報作業表の最大数の求め方

位置情報作業表の最大数の求め方を次の表に示します。

表18‒5 位置情報作業表の最大数の求め方

SQL文

位置情報作業表の最大数

SELECT文

  1. インデクスを定義した複数の列に検索条件を指定する場合

  2. FOR UPDATE句を指定するか又はこのカーソルを使用した更新があり,インデクスを定義した列に検索条件を指定する場合

  3. 繰返し列インデクスを定義した列に検索条件を指定する場合

  4. SQL最適化オプションに「プラグイン提供関数からの一括取得機能」を指定し,探索条件にプラグインインデクスを使用するプラグイン提供関数を指定して検索する場合

1〜4で,探索時に使用するインデクス数+1になります。

  • UPDATE文

  • DELETE文

探索条件中にインデクスを定義した列がある場合,探索時に使用するインデクス数+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(単位:バイト)

注※ 述語が繰返し列に対する条件の場合,真となる要素の総数となります。