Hitachi

ノンストップデータベース HiRDB Version 10 構造型データベース機能


3.2.6 レコード格納時の空き領域の作成(サブページ分割をする場合)

HiRDB/SDデータベース作成ユティリティ(pdsdblod)でのレコード格納時に,サブページ内にレコードを格納しない領域(サブページ内の未使用領域)を作成したり,セグメント内に使用しない空きページ(セグメント内の空きページ)を作成したりできます。

また,SDBデータベースを操作するAPIによるレコード格納時に,PCTFREE有効化オプションを指定すると,SDBデータベース格納定義のPCTFREE句で指定したサブページ内の未使用領域の比率を有効にしてレコードを格納できます。PCTFREE有効化オプションは,4V FMBまたは4V AFMのSDBデータベースの場合に指定できます。

サブページ内の未使用領域の比率やセグメント内の空きページの比率は,次の個所で指定できます。

PCTFREE句とrecfreeオペランドの使い分けについては,「(3) PCTFREE句とrecfreeオペランドの使い分け」を参照してください。

空き領域の作成イメージを次の図に示します。

図3‒12 空き領域の作成イメージ

[図データ]

なお,この項の説明中の「データロード」については,HiRDB/SDデータベース作成ユティリティ(pdsdblod)によるフォーマットライト機能を使用したレコードの格納も含みます。

〈この項の構成〉

(1) 空き領域を作成する目的

空き領域を作成する目的を次に示します。

(a) データロード後のレコード格納に備えて空き領域を確保する

データロードしたあとに,子レコードを格納する場合,データロード時に作成したサブページ内の未使用領域,セグメント内の空きページを使用することで,同一ルートレコード下のレコードの近傍に子レコードを格納できます。

サブページ内の未使用領域は,次の場合に使用されます。

  • SDBデータベース定義のSET句下のORDER句でSORTED DUPLICATES PROHIBITEDを指定し,格納済みのレコードが持つユーザキーの中間のキーを持つレコードを格納する場合

  • SDBデータベース定義のSET句下のORDER句でLASTを指定した場合や,ORDER句でSORTED DUPLICATES PROHIBITEDを指定して,最大のユーザキーを持つレコードを格納する場合で,基準サブページおよびそのファミリ内接続サブページに未使用領域があるとき

    ファミリ内接続サブページについては,「2.7.1(2) サブページ間の関連づけとファミリ内接続サブページ」を参照してください。

セグメント内の空きページは,次の場合に使用されます。

  • 基準サブページおよびその基準サブページが属するページ内のファミリ内接続サブページに未使用領域がない場合

  • データロードしたあとに,格納するレコードにサブページ切り替え('O'または'C')を指定した場合

  • 基準レコードがサブページ切り替えの'O'指定をされたレコードのため,基準サブページへの格納ができない場合

  • 事前割り当てサブページ内にレコードを格納できる空き領域がないため,事前割り当てサブページへの格納ができない場合

データロードしたあとのレコード格納による空き領域の使用例(SDBデータベース定義のSET句下のORDER句でSORTED DUPLICATES PROHIBITEDを指定した場合)を次の図に示します。

図3‒13 データロードしたあとのレコード格納による空き領域の使用例(SDBデータベース定義のSET句下のORDER句でSORTED DUPLICATES PROHIBITEDを指定した場合)

[図データ]

[図データ]

データロードしたあとのレコード格納による空き領域の使用例(SDBデータベース定義のSET句下のORDER句でLASTを指定した場合)を次の図に示します。

図3‒14 データロードしたあとのレコード格納による空き領域の使用例(SDBデータベース定義のSET句下のORDER句でLASTを指定した場合)

[図データ]

[図データ]

(b) サブページに格納するレコード件数を制限する【4V AFM】

HiRDB/SDでは,複数のトランザクション間の整合性を保つために,サブページ単位で排他制御をしています。そのため,1サブページ内に格納されるレコード件数が多いほど,排他の競合が発生しやすくなります。そこで,サブページ内の未使用領域の比率を指定して1サブページ内に格納するレコード件数を制限することで,排他の競合を抑えることができます。

サブページ内の未使用領域の比率の指定によって,サブページに格納するレコード件数を制限する例を次の図に示します。なお,サブページに格納するレコード件数を制限する場合は,SDBデータベースを操作するAPIによるレコード格納時に,PCTFREE有効化オプションを指定する必要があります。SDBデータベースを操作するAPIについては,マニュアル「TP1/Financial Service Platform プログラム作成の手引」を参照してください。

図3‒15 サブページに格納するレコード件数を制限する例

[図データ]

(2) サブページ内の未使用領域の比率,セグメント内の空きページの比率の適用基準

サブページ内の未使用領域の比率,セグメント内の空きページの比率の適用基準を次に示します。

(a) サブページ内の未使用領域の比率の適用基準

次のような場合は,サブページ内の未使用領域の比率の設定を検討してください。

  • SDBデータベース定義のSET句下のORDER句でSORTED DUPLICATES PROHIBITEDを指定している場合で,データロード後に格納するレコードに,格納済みのレコードが持つユーザキーの中間のキーを持つレコードがあるとき

  • サブページ内に格納するレコード件数を制限して,サブページによる排他の影響範囲を限定したいとき(4V AFMのSDBデータベースの場合)

上記の条件に該当しないときは,サブページ内の未使用領域の比率に0を指定してください。

(b) セグメント内の空きページの比率の適用基準

次のような場合は,セグメント内の空きページの比率の設定を検討してください。

  • SDBデータベース定義のSET句下のORDER句でLASTを指定した場合,またはORDER句でSORTED DUPLICATES PROHIBITEDを指定しても,ユーザキーの昇順にレコードを格納することがわかっているとき

  • データロード後に格納する子レコードが,サブページ内の未使用領域だけでは格納しきれないとき

  • データロード時にページ切り替えを指定していて,サブページを占有したレコードがあるとき

  • データロード後に,ページ切り替え指定('C'指定または'O'指定)で格納するレコードがあるとき

上記の条件に該当しないときは,セグメント内の空きページの比率に0を指定してください。

(3) PCTFREE句とrecfreeオペランドの使い分け

HiRDB/SDデータベース作成ユティリティ(pdsdblod)のenvironment文でrecfreeオペランドを指定すると,SDBデータベース格納定義のPCTFREE句で指定したサブページ内の未使用領域の比率,およびセグメント内の空きページの比率は無視され,recfreeオペランドの指定値に従って空き領域が作成されます。

そのため,サブページ内の未使用領域の比率,およびセグメント内の空きページの比率の指定は次のように指定してください。

4V AFMのSDBデータベースのデータロード時に,データロード後のレコード格納に備えて空き領域を確保し,かつSDBデータベースを操作するAPIによるレコード格納時にレコード件数を制限したい場合には,それぞれの目的に合わせてrecfreeオペランド,PCTFREE句の指定値を見積もってください。

(4) サブページ内の未使用領域の比率,およびセグメント内の空きページの比率に関する留意事項

サブページ内の未使用領域の比率,およびセグメント内の空きページの比率に関する留意事項を次に示します。

(a) 未使用領域の比率および空きページの比率の指定に関する留意事項

  • セグメント内の空きページの比率には,50%を超える値を指定できません。レコード格納時にセグメント内の空きページを使い切った場合,HiRDB/SDは,ほかのセグメント内の空きページを割り当ててレコードを格納します。そのため,ファミリ単位の近傍配置ができないことがあります。

  • 4V FMBまたはSD FMBのSDBデータベースでは,ルートレコードの格納サブページの排他によって,ルートレコード下のレコードへのアクセスをシリアライズするため,レコード件数の制限による同時実行性が向上する効果はありません。このため,レコード件数を制限する目的でのサブページ内の未使用領域の比率には0を指定してください。

  • フォーマットライトを行うSDBデータベースの場合,サブページ内の未使用領域の比率,およびセグメント内の空きページの比率に0を指定してください。ただし,サブページに格納するレコード件数を制限したい場合は,サブページ内の未使用領域の比率を指定してください。

  • 4V AFMのSDBデータベースでOCCURRENCE NUMBER句の指定が0の場合,仮想ルートレコード下には最大1件の子レコードしか存在しません。そのため,サブページ内の未使用領域の比率には0を指定してください。

(b) 未使用領域および空きページの作成に関する留意事項

  • サブページ内の未使用領域の比率に関係なく,サブページには最低1件のレコードが格納されます。このため,指定した比率の未使用領域が作成されないことがあります。

  • HiRDB/SDデータベース作成ユティリティ(pdsdblod)で事前割り当てサブページにレコードを格納する場合,サブページ内の未使用領域の比率の指定は無視され,0%が指定されたものとして動作します。このため,指定した比率の未使用領域は作成されません。また,レコードは詰めて格納されます。

  • HiRDB/SDデータベース作成ユティリティ(pdsdblod)の実行時に,事前割り当てサブページが属するページを確保する際,セグメント内の空きページの比率の指定は無視され,0%が指定されたものとして動作します。このため,事前割り当てサブページが属するページを含むセグメント内の空きページの比率は,指定値より小さい値になることがあります。

  • SDBデータベースを操作するAPIで事前割り当てサブページにレコードを格納する際,PCTFREE有効化オプションの指定によって,サブページ内に未使用領域を作成することはできません。PCTFREE有効化オプションを適用すると,SDBデータベースを操作するAPIによるレコードの格納がエラーになります。

(c) 未使用領域へのレコード格納方法に関する留意事項

サブページ内の未使用領域へのレコード格納方法は,レコード格納契機によって異なります。次に示す契機ごとの差異を次の表に示します。

表3‒13 レコード格納契機によるレコード格納の差異

レコード格納契機

サブページ内の未使用領域

レコード格納前

レコード格納後

指定比率以上の未使用領域あり

指定比率以上の未使用領域なし

指定比率以上の未使用領域あり

指定比率以上の未使用領域なし

HiRDB/SDデータベース作成ユティリティ(pdsdblod)の実行時

×

SDBデータベースを操作するAPIによるレコードの格納時

×

DMLによるレコードの格納時

(凡例)

○:当該サブページにレコードが格納されます。

×:当該サブページにレコードは格納されません。

−:レコード格納の有無に関係しません。

注※

レコードを格納できるだけの未使用領域がある場合は,PCTFREEの指定に関係なくそのサブページにレコードが格納されます。

HiRDB/SDデータベース作成ユティリティ(pdsdblod)実行時には,レコード格納前のサブページに指定した比率の未使用領域が存在すれば,そのサブページにレコードを格納するため,指定した比率で未使用領域が作成されないことがあります。

(5) データロード後のレコード格納に備えて空き領域を確保する場合の見積もり例

(a) 基本的な考え方

  • 事前割り当てサブページに格納するファミリについては,除外して考えます。事前割り当てサブページに格納するファミリの容量の見積もりについては,「3.5.5(3) 事前割り当てページ数または事前割り当てサブページ数の算出【4V FMB】」を参照してください。

  • 作成するSDBデータベースの特性を考慮して,平均的なファミリを想定します。データロード時に作成した空き領域に,データロード後に格納するレコードがすべて格納できる状態とします。この状態を次の図に示します。

    図3‒16 見積もりで想定するレコード格納状態

    [図データ]

(b) 見積もりの進め方

作成するSDBデータベースの特性から平均的なファミリを想定して,次の表に示す項目を見積もってください。レコード長の見積もりについては,「3.5.5(1) レコード長の算出」を参照してください。

見積もり時の留意事項を次に示します。

  • 4V AFMのSDBデータベースで,SDBデータベース定義のOCCURRENCE NUMBER句の指定値が1以上のレコードについては,ページ切り替え指定が'O'指定の仮想ルートレコードとして見積もってください。

  • SD FMBのSDBデータベースの場合は,ページ切り替えの指定はなしとして見積もってください。

    表3‒14 見積もりに必要な項目

    項番

    項目

    レコードの格納契機

    ページ切り替え指定

    空き領域の種別

    見積もり式で使用する変数

    備考

    1

    レコードを格納するデータページのサブページ分割数

    spn

    2

    レコードを格納するデータページのサブページ長

    spl

    3

    レコード長

    L

    レコード型ごとに見積もります。

    4

    レコード件数

    データロード時に格納するレコード件数

    'O'指定

    t1

    平均的なファミリまたは事前割り当てサブページに格納するファミリについて,レコード型ごとに見積もります。

    5

    'C'指定

    c1

    6

    指定なし

    n1

    7

    データロード後に格納するレコード件数

    'O'指定

    t2

    8

    'C'指定

    c2

    9

    指定なし

    サブページ内の未使用領域を使用するレコード件数

    u2

    10

    セグメント内の空きページを使用するレコード件数

    s2

    (凡例)

    −:該当しません。

    注※

    サブページ分割数によってサブページ長が決まります。サブページ長については,「3.2.4(7) サブページ長(サブページ分割数)の設計方針」を参照してください。

表3-14 見積もりに必要な項目」の「空き領域の種別」で,データロード後に格納するレコードをサブページ内の未使用領域,およびセグメント内の空きページのどちらに見積もるかは,次の表に従って決定してください。

表3‒15 見積もり対象とする空き領域種別の決定方針

SDBデータベース定義のSET句下の指定

格納するレコードの特性

見積もり対象とする空き領域の種別

ORDER句にSORTED DUPLICATES PROHIBITED指定

格納するレコードが持つユーザキーの中間のキーを持つレコード

サブページ内の未使用領域

最大のユーザキーを持つレコード

セグメント内の空きページ

ORDER句にLAST指定

セグメント内の空きページ

(凡例)

−:該当しません。

表3-14 見積もりに必要な項目」に従った見積もり項目のレコード長,およびレコード件数について,見積もり例を次の表に示します。

表3‒16 レコード長,およびレコード件数の見積もり例

レコード型

レコード長(バイト)

データロード時に格納するレコード

データロード後に格納するレコード

'O'指定(件数)

'C'指定(件数)

指定なし(件数)

'O'指定(件数)

'C'指定(件数)

指定なし

サブページ内の未使用領域を使用するレコード(件数)

セグメント内の空きページを使用するレコード(件数)

REC1(親)

40

0

0

1

0

0

0

0

REC2(子)

100

5

5

40

1

1

8

8

REC3(孫)

200

0

0

150

0

0

40

20

上記の表に従った格納状態のイメージを次の図に示します。

図3‒17 見積もり例に従った格納状態のイメージ

[図データ]

(c) 注意事項

セグメント内の空きページの比率には,50%を超える値を指定できないため,想定したファミリの格納イメージで,セグメント内の空きページの比率が50%を超える場合には,データロード後に格納するレコードの一部をサブページ内の未使用領域を使用するものとして見積もるようにしてください。ただし,サブページ切り替え('O'指定,'C'指定)をするレコードは格納時にサブページ内の未使用領域を使用しないため,サブページ内の未使用領域を使用するものとして見積もることはできません。

(d) 見積もり式の前提

見積もり式では,「表3-14 見積もりに必要な項目」の「見積もり式で使用する変数」で示した変数を使用します。また,「表3-14 見積もりに必要な項目」の項番3〜10については,レコード型ごとに見積もるため,ファミリ単位の件数の場合には,すべてのレコード型について総和が必要です。すべてのレコード型についての総和は,総和記号を使って次のように表記します。

[図データ]

(e) サブページ内の未使用領域の比率の見積もり

サブページ内の未使用領域の比率の見積もりで,すべてのレコードに対してページ切り替えを指定する場合には,見積もり値を0としてください。

サブページ内の未使用領域の比率を見積もる場合,「表3-14 見積もりに必要な項目」の項番1,2,3,6,9を使用します。項番5,8については,次の式でレコード型が使用する総領域長を計算してください。

[図データ]

また,項番6,9を使用して,次のように平均領域長を計算してください。

[図データ]

上記で計算した結果を基に,次のRおよびAを計算してください。

R:サブページ内の領域に対するデータロード時の未使用領域の比率

A:データロード時とデータロード後の総レコード長に対する,データロード時の総レコード長の比率

[図データ]

サブページ内の未使用領域の比率を次の式で見積もってください。

[図データ]

(f) サブページ内の未使用領域の比率の見積もり例

表3-16 レコード長,およびレコード件数の見積もり例」に示す値を基に,サブページ内の未使用領域の比率を見積もった例を次に示します。この例では,レコードを格納するデータページのサブページ分割数を2として計算します。

[図データ]

(g) セグメント内の空きページの比率の見積もり

セグメント内の空きページの比率を見積もる場合,「表3-14 見積もりに必要な項目」の項番1〜8および10を使用して計算してください。サブページ内の未使用領域の比率をCとすると,セグメント内の空きページの比率は,ファミリが使用するページ数と,データロード後に格納するレコードが使用するページ数の比率として見積もります。

項番6,9について,次に示す式を使用してレコード型が使用する総領域長を計算します。

[図データ]

また,それぞれについて,次のように平均領域長を計算してください。

[図データ]

次の計算式に従って,平均的なファミリが使用するサブページ数を計算してください。

[図データ]

次の計算式に従って,データロード時に格納するレコードが使用するサブページ数を計算してください。

[図データ]

以上を基に,セグメント内の空きページの比率を計算してください。

[図データ]

(h) セグメント内の空きページの比率の見積もり例

表3-16 レコード長,およびレコード件数の見積もり例」の表に示す値を基に見積もり計算の例を次に示します。レコードを格納するデータページのサブページ分割数を2,サブページ内の未使用領域の比率を29%として計算します。

[図データ]

(6) サブページに格納するレコード件数を制限する場合のサブページ内の未使用領域の比率の見積もり【4V FMB,4V AFM】

(a) 見積もりの前提

  • 事前割り当てサブページに格納するファミリについては,サブページ内の未使用領域を確保しないで詰めて格納していくため,対象外とします。

  • 4V AFMのSDBデータベースでOCCURRENCE NUMBER句の指定が1以上の場合を前提にします。4V FMBのSDBデータベースの場合,または4V AFMのSDBデータベースでOCCURRENCE NUMBER句の指定が0の場合は,レコード件数の制限による同時実行性の向上に効果がないため,対象外とします。

  • SD FMBのSDBデータベースの場合,サブページに格納するレコード件数を制限できないため,対象外とします。

(b) 見積もりの進め方

作成するデータベースの中で,格納件数を制限する対象のレコード型を,次の表に従って決定してください。

表3‒17 格納件数を制限する対象のレコード型の決定

項番

親子集合の定義数

格納件数の制限対象とするレコード型

備考

1

1

子レコードのレコード型

2

2以上

同時実行性が最も要求される子レコードのレコード型

SDBデータベースを操作するAPIによるレコード格納時,対象外のレコード型に対してサブページ内の未使用領域を作成したくない場合は,制限対象のレコード型のレコード格納時だけPCTFREE句の指定を有効にしてください。

なお,HiRDB/SDデータベース作成ユティリティ(pdsdblod)のrecfreeオペランドでは,レコード型ごとにサブページ内の未使用領域の比率を設定することはできません。

(凡例)

−:該当しません。

サブページに格納するレコード件数を制限する場合のサブページ内の未使用領域の比率は次の計算式で見積もってください。レコード長の見積もりについては,「3.5.5(1) レコード長の算出」を参照してください。

なお,見積もり式で計算結果が負となる場合は,サブページにN件のレコードを格納できないため,レコード件数を見直してください。

[図データ]

(c) 留意事項

  • レコードを格納するRDエリアのサブページ内には,HiRDB/SDがシステムで使用する制御情報が格納されています。レコードの格納,または削除による制御情報長の変化や,レコードの格納状況によっては,見積もったレコード件数よりも少ないレコードしか格納できない場合があります。

  • レコード長の異なる複数のレコード型をサブページに格納する場合,レコードの格納状況によって,見積もったレコード件数より少ないレコードしか格納できなかったり,逆に多くのレコードが格納できたりすることがあります。

  • SDBデータベースを操作するAPI実行時,またはHiRDB/SDデータベース作成ユティリティ(pdsdblod)実行時では,見積もりの計算式が異なります。そのため,同じレコード件数に制限したい場合は,それぞれで見積もる必要があります。

    見積もり結果が異なる場合は,SDBデータベース格納定義のPCTFREE句,およびHiRDB/SDデータベース作成ユティリティ(pdsdblod)のenvironment文のrecfreeオペランドにそれぞれの見積もり結果を指定してください。

(d) 見積もりの計算例

レコード長が120バイト,レコードを格納するデータページのサブページ分割数を2として,SDBデータベースを操作するAPI実行時にサブページに格納するレコード件数を10件としたい場合の見積もりの計算例を次に示します。

[図データ]