Hitachi

ノンストップデータベース HiRDB Version 10 システム定義(UNIX(R)用)


9.2.4 作業表に関するオペランド

◆ pd_work_buff_mode = each|pool|pool2

HiRDBが作業表を作成するときのバッファの確保方式を指定します。

each:個々の作業表ごとにバッファを確保します。

pool:サーバプロセス単位にバッファプールとして一括して確保します。確保するタイミングは,プロセス起動時に行います。

pool2:サーバプロセス単位にバッファプールとして一括して確保します。確保するタイミングは,サーバプロセス内で1つ目の作業表を作成する時です。サーバプロセスで使用する作業表がなくなった時に解放します。

《指定値の目安》
  • 通常はpool(省略値)を指定してください。特に大量データを検索して,結合,ORDER BY,GROUP BYなどの操作をする場合にはpoolを指定してください。

  • ユーザサーバの常駐プロセス数よりも作業表を使用する操作(SQL又はユティリティ)を行うトランザクションの同時実行数の方が少ない場合は,pool2の指定を推奨します。

  • あらかじめ,作業表用バッファに使用できるプロセス固有領域サイズが決まっている場合,pool又はpool2を指定してください。pool又はpool2を指定すると,HiRDBが効率良く作業表用バッファを各作業表に配分します。

    この場合,pd_work_buff_sizeに指定した値でプロセス固有領域を占有し,そのプール内で作業表の入出力をバッファリングします。したがって,pd_work_buff_sizeに指定した値以上にプロセス固有メモリを占有することはありません。

    pool2は,作業表を使用するトランザクションが動作する際にプロセス固有領域を確保し,そのトランザクションが終了する際にプロセス固有領域を解放します。したがって,作業表を使用している最中のプロセスでだけpd_work_buff_size分のメモリを消費します。

《注意事項》

このオペランドにeachを指定すると,メモリ使用量が増加します。

《各見積もり式への影響》

pd_work_buff_modeオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • 「64ビットモードに移行する際の考慮点」

  • 「HiRDB/シングルサーバのメモリ所要量の見積もり」の「メモリ所要量の計算式」

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「メモリ所要量の計算式」

◆ pd_work_buff_size = 作業表用バッファ長

〜<符号なし整数>(単位:キロバイト)

  • 32ビットモードの場合:((128〜1000000))

  • 64ビットモードの場合:((128〜4000000000))

HiRDBが作成する作業表のバッファの大きさをキロバイト単位で指定します。

項目

pd_work_buff_mode=eachの場合

pd_work_buff_modeにpool又はpool2を指定した場合

利点

作業表バッファ長が大きいと,データ操作時に発生する作業表用ファイルへの入出力回数を削減できるため,作業表を使用するSQLの実行時間を削減できます。ただし,各サーバのプロセス固有メモリを使用するので,システム全体のメモリ量(実メモリ,仮想メモリ)を考慮して指定してください。

特にpd_work_buff_mode=eachの場合,メモリは「pd_work_buff_sizeの値×必要作業表数」分確保されます。一度確保されたプロセス固有メモリは,その後HiRDBが解放要求しても仮想メモリ上はそのプロセスに占有されてしまいます(そのプロセスがなくなるまで解放されません)。したがって,必要以上に大きな値を指定すると,ほかのプロセスで仮想メモリ不足が生じることがあります。

適用基準

大量データを検索して,結合,ORDER BY,GROUP BYなどの操作をする場合に指定します。このとき,pd_work_buff_mode = pool又はpool2を指定してください。

指定値の目安

  • 個々の作業表ごとに確保するバッファの大きさを指定します。

  • 作業表用バッファ長に,作業表メモリ容量より大きな値を指定すると,作業表作成時の作業表用ファイルへの入出力がなくなるので,作業表を作成する時間が短くなります。作業表メモリ容量の見積もり式は次のとおりです。

    作業表メモリ容量=対象となる作業表容量÷2

  • サーバプロセス単位に一括して確保する作業表用バッファプールの大きさを指定します。

  • 大量データを検索して,結合,ORDER BY,GROUP BYなどの操作をする場合は,4352〜5120を指定してください。指定すると,ソートでの入出力単位が大きくなるため,ソート処理時間が短くなります。

  • 作業表用バッファ長に,SQL文単位の作業表メモリ総容量を上限として,大きな値を指定するほど作業表作成時の作業表用ファイルへの入出力がなくなるので,作業表を作成する時間が短くなります。SQL文単位の作業表メモリ総容量の見積もり式は次のとおりです。

    SQL文単位の作業表メモリ総容量=a×b+c×d

注意事項

  • 複数のユーザが同時に実行する場合,及び複数個の作業表を使用するSQL文などを実行する場合には,指定したサイズのバッファが,個々の作業表ごとに確保されます。そのため,大きな値を指定するとメモリを圧迫する原因となります。

  • システムで確保できない大きなバッファサイズを指定した場合,サーバは起動できますが,作業表作成時にプロセス固有メモリの確保に失敗して,SQLエラーとなります。

  • SQL文単位に使用する作業表の数に比べて作業表用バッファ長に指定した値が小さいと,eachを指定した場合に比べて処理時間が増加することがあります。具体的には,「SQL文単位の作業表最大数×128」以上の値を指定してください。SQL文単位の作業表最大数の見積もり式は次のとおりです。

    SQL文単位の作業表最大数=b+d

  • poolを指定した場合,システムで確保できない大きなバッファサイズを指定した場合,プロセス固有メモリの確保に失敗して,サーバを起動できません。

オペランドの規則

指定値は,128の倍数を指定してください。128の倍数でない場合,自動的に128の倍数に切り上げられます。

  • 指定値は,128の倍数を指定してください。128の倍数でない場合,自動的に128の倍数に切り上げられます。

  • 384以上の値を指定してください。384未満の値が指定されると,自動的に384に切り上げられます。

省略値

  • このオペランドを省略し,更にシングルサーバ定義のpd_work_buff_sizeオペランドを省略した場合,128が仮定されます。

  • このオペランドを省略して,更にバックエンドサーバ定義及びディクショナリサーバ定義のpd_work_buff_sizeオペランドを省略した場合,512が仮定されます。

  • このオペランドを省略し,更にシングルサーバ定義のpd_work_buff_sizeオペランドを省略した場合,384(32ビットモードの場合)又は5120(64ビットモードの場合)が仮定されます。

  • このオペランドを省略して,更にバックエンドサーバ定義及びディクショナリサーバ定義のpd_work_buff_sizeオペランドを省略した場合,1024(32ビットモードの場合)又は5120(64ビットモードの場合)が仮定されます。

a:↑{作業表(列情報格納用)の容量(単位:キロバイト)÷2}÷128↑×128

b:作業表(列情報格納用)の最大数

c:↑{作業表(位置情報格納用)の容量(単位:キロバイト)÷2}÷128↑×128

d:作業表(位置情報格納用)の最大数

注※

これらの項目の見積もり方法については,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

《各見積もり式への影響》

pd_work_buff_sizeオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • 「HiRDB/シングルサーバのメモリ所要量の見積もり」の「メモリ所要量の計算式」

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「メモリ所要量の計算式」

  • 「HP-UXのオペレーティングシステムパラメタの見積もり」

◆ pd_work_buff_expand_limit = 作業表用バッファの増分上限値

〜<符号なし整数>(単位:キロバイト)

  • 32ビットモードの場合:((128〜1000000))

  • 64ビットモードの場合:((128〜4000000000))

HiRDBが作成する作業表用バッファ長はpd_work_buff_sizeオペランドで指定します。この作業表用バッファの不足時,作業表用バッファを自動増分する場合にこのオペランドを指定します。このオペランドで指定した値になるまで作業表用バッファを増分します。

例えば,オペランドに次の指定をした場合,通常1,024キロバイトの作業表用バッファを確保します。作業表用バッファが1,024キロバイトで不足すると,2,048キロバイトまで作業表用バッファを増分します。

  • pd_work_buff_size = 1024

  • pd_work_buff_expand_limit = 2048

次に示すときにHiRDBは作業表用バッファを増分します。

  • 結合方式がハッシュジョイン,又は副問合せの実行方式にハッシュ実行が適用されている場合に,必要な作業表用バッファが確保できないとき

  • 複数の作業表を同時に使用する場合,各作業表に作業表用バッファを128キロバイト割り当てて作業表用バッファが不足するとき

《前提条件》

pd_work_buff_modeオペランドを省略するか,又はpool又はpool2を指定している必要があります。

《利点》

作業表用バッファ不足(pd_work_buff_sizeオペランドの指定値不足)でUAPがエラーになるのを防げます。

《注意事項》
  • 次に示すどちらかの条件を満たす場合は作業表用バッファを増分しません。

    ・pd_work_buff_expand_limitオペランドを指定しない

    ・pd_work_buff_expand_limitオペランドの値≦pd_work_buff_sizeオペランドの値

  • システムで確保できない大きなバッファサイズを指定した場合,サーバは起動できますが,作業表作成時にプロセス固有メモリの確保に失敗して,SQLエラーとなります。

  • 作業表用バッファを増分した場合はメモリを解放するため,常駐サーバプロセスについても次の契機にサーバプロセスを終了します(Linux版を除く)。

    HiRDB/シングルサーバの場合:

    UAPをHiRDBから切り離したとき(DISCONNECTしたとき)にシングルサーバプロセスを終了します。

    HiRDB/パラレルサーバの場合:

    ホールダブルカーソルを使用していない場合はトランザクションを正常終了するか,又は取り消したときに,バックエンドサーバプロセス又はディクショナリサーバプロセスを終了します。

    ホールダブルカーソルを使用している場合は,UAPをHiRDBから切り離したとき(DISCONNECTしたとき)に,バックエンドサーバプロセス又はディクショナリサーバプロセスを終了します。

《オペランドの規則》

指定値は128の倍数を指定してください。128の倍数でない場合,自動的に128の倍数に切り上げられます。

《ほかのオペランドとの関連》

各サーバプロセスでの作業表用バッファの初回増分時にKFPH29008-Iメッセージを出力します。なお,pd_work_table_optionオペランドでKFPH29008-Iメッセージの出力を抑止できます。

《留意事項》

作業表用バッファを増分した場合,該当するサーバプロセスで使用中の作業表数が0になると,増分した作業表用バッファを解放します。作業表の使用数が0になるのは次に示すときです。

  • 使用中のカーソルをすべてクローズしたとき(この場合,作業表の使用数が0にならないことがあります)

  • ホールダブルカーソルを使用していない場合は,トランザクションを正常終了するか,又は取り消したとき

  • ホールダブルカーソルを使用している場合は,UAPをHiRDBから切り離したとき(DISCONNECTしたとき)

《備考》

「ハッシュジョイン,副問合せのハッシュ実行」は,次に示す場合に適用されます。

  • pd_additional_optimize_levelオペランド,クライアント環境定義のPDADDITIONALOPTLVLオペランド,又はSQLコンパイルオプションのADD OPTIMIZE LEVELオペランドで,「コストベース最適化モード2の適用」と一緒に「ハッシュジョイン,副問合せのハッシュ実行」を指定する

  • SQL文中の結合方式のSQL最適化指定にHASHを指定する

  • SQL文中の副問合せ実行方式のSQL最適化指定にHASHを指定する

《各見積もり式への影響》

pd_work_buff_expand_limitオペランドの指定値を変更すると,次の見積もり式に影響があります。

マニュアル「HiRDB システム導入・設計ガイド」:

  • 「HiRDB/シングルサーバのメモリ所要量の見積もり」の「メモリ所要量の計算式」

  • 「HiRDB/パラレルサーバのメモリ所要量の見積もり」の「メモリ所要量の計算式」

◆ pdwork -v "HiRDBファイルシステム領域名称"〔,"HiRDBファイルシステム領域名称"〕…

〜<141文字以内のパス名>

作業表用ファイル用のHiRDBファイルシステム領域の名称を指定します。作業表用ファイルとは,SQL文を実行するときに一時的に情報を格納するファイルのことでHiRDBが自動的に作成します。作業表用ファイルを必要とするSQL文については,マニュアル「HiRDB システム導入・設計ガイド」の「作業表用ファイルの概要」を参照してください。

なお,このオペランドは省略しないでください。省略した場合,作業表用ファイルを必要とするSQL文を実行できないことがあります。

《注意事項》
  • このオペランドに指定するHiRDBファイルシステム領域はpdfmkfsコマンドで初期設定したHiRDBファイルシステム領域を指定してください。

  • 作業表用ファイルの容量が大きい場合は,領域長が大きいHiRDBファイルシステム領域を指定してください。作業表用ファイルの容量見積もりについては,マニュアル「HiRDB システム導入・設計ガイド」を参照してください。

    ただし,HiRDBファイルシステム領域をpdfmkfs -aコマンドで初期設定した場合,-nオプションで指定した値を使い切ると,HiRDBは領域サイズを自動で拡張します。pdfmkfsコマンドについては,マニュアル「HiRDB コマンドリファレンス」を参照してください。

  • 作業表用ファイル用のHiRDBファイルシステム領域は,RDエリア及びシステムファイル用のHiRDBファイルシステム領域と同じものを指定できません。

  • このオペランドにHiRDBファイルシステム領域を二つ以上指定している場合,作業表用ファイルの作成時にエラーが発生したHiRDBファイルシステム領域は,それ以降,原則使用しません。ほかのHiRDBファイルシステム領域だけを使用します。

    例外として,容量不足やファイル数オーバーなどによって,ほかのすべてのHiRDBファイルシステム領域で作業表用ファイルの作成が失敗した場合に,使用されなくなったHiRDBファイルシステム領域で作業表用ファイルを作成しようとします。その結果,作業表用ファイルが正常に作成された場合,そのHiRDBファイルシステム領域を再使用するようになります。

    なお,該当のサーバ(HiRDB/シングルサーバの場合はHiRDB)を一度終了して開始すると,作業表用ファイルの作成時にエラーが発生して使用されなくなったHiRDBファイルシステム領域が使用できるようになります。

《オペランドの規則》
  • HiRDBファイルシステム領域名称は必ず1個以上指定してください。

  • HiRDBファイルシステム領域名称は最大16個指定できます。

  • このオペランドはバックエンドサーバ定義内に一つだけ指定できます。複数個指定した場合は最初に指定したものが有効となります。

  • HiRDB/パラレルサーバの場合は,ほかのサーバと同じHiRDBファイルシステム領域を指定しないでください。

  • HiRDBファイルシステム領域を複数個指定する場合,キャラクタ型スペシャルファイル上に作成したHiRDBファイルシステム領域と通常ファイル上に作成したHiRDBファイルシステム領域を混在して指定できます。