スケーラブルデータベースサーバ HiRDB Version 8 システム定義(Windows(R)用)

[目次][索引][前へ][次へ]

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

6) pd_work_buff_mode = each | pool
HiRDBが作業表を作成するときのバッファの確保方式を指定します。
each:個々の作業表ごとにバッファを確保します。
pool:サーバプロセス単位にバッファプールとして一括して確保します。
《指定値の目安》
  • 通常はpoolを指定してください。特に大量データを検索して,結合,ORDER BY,GROUP BYなどの操作をする場合にはpoolを指定してください。
  • あらかじめ,作業表用バッファに使用できるプロセス固有領域サイズが決まっている場合,poolを指定してください。poolを指定すると,HiRDBが効率良く作業表用バッファを各作業表に配分します。
    この場合,pd_work_buff_sizeに指定した値でプロセス固有領域を占有し,そのプール内で作業表の入出力をバッファリングします。したがって,pd_work_buff_sizeに指定した値以上にプロセス固有メモリを占有することはありません。
《オペランドの省略値》
このオペランドを省略すると,サーバ共通定義の同じオペランドの指定値が有効となります。サーバ共通定義の同じオペランドも省略すると,poolが仮定されます(pd_sysdef_default_optionオペランドにv6compatibleを指定している場合はeachが仮定されます)。

 

7) pd_work_buff_size = 作業表用バッファ長
〜<符号なし整数>(単位:キロバイト)
  • 32ビットモードの場合:((128〜1000000))
  • 64ビットモードの場合:((128〜4000000000))
HiRDBが作成する作業表のバッファの大きさをキロバイト単位で指定します。
項目 pd_work_buff_mode=eachの場合 pd_work_buff_mode=poolの場合
利点 作業表バッファ長が大きいと,データ操作時に発生する作業表用ファイルへの入出力回数を削減できるため,作業表を使用するSQLの実行時間を削減できます。ただし,各サーバのプロセス固有メモリを使用するので,システム全体のメモリ量(実メモリ,仮想メモリ)を考慮して指定してください。
特にpd_work_buff_mode=eachの場合,メモリは「pd_work_buff_sizeの値×必要作業表数」分確保されます。したがって,必要以上に大きな値を指定すると,ほかのプロセスで仮想メモリ不足が生じることがあります。
適用基準 大量データを検索して,結合,ORDER BY,GROUP BYなどの操作をする場合に指定します。このとき,pd_work_buff_mode = poolを指定してください。
指定値の目安
  • 個々の作業表ごとに確保するバッファの大きさを指定します。
  • 作業表用バッファ長に,作業表メモリ容量より大きな値を指定すると,作業表作成時の作業表用ファイルへの入出力がなくなるので,作業表を作成する時間が短くなります。作業表メモリ容量の見積もり式は次のとおりです。
    作業表メモリ容量=対象となる作業表容量÷2


  • サーバプロセス単位に一括して確保する作業表用バッファプールの大きさを指定します。
  • 大量データを検索して,結合,ORDER BY,GROUP BYなどの操作をする場合は,4352〜5120を指定してください。指定すると,ソートでの入出力単位が大きくなるため,ソート処理時間が短くなります。
  • 作業表用バッファ長に,SQL文単位の作業表メモリ総容量を上限として,大きな値を指定するほど作業表作成時の作業表用ファイルへの入出力がなくなるので,作業表を作成する時間が短くなります。SQL文単位の作業表メモリ総容量の見積もり式は次のとおりです。
    SQL文単位の作業表メモリ総容量=a×b+c×d
注意事項 複数のユーザが同時に実行する場合,及び複数個の作業表を使用するSQL文などを実行する場合には,指定したサイズのバッファが,個々の作業表ごとに確保されます。そのため,大きな値を指定するとメモリを圧迫する原因となります。 SQL文単位に使用する作業表の数に比べて作業表用バッファ長に指定した値が小さいと,eachを指定した場合に比べて処理時間が増加することがあります。具体的には,「SQL文単位の作業表最大数×128」以上の値を指定してください。SQL文単位の作業表最大数の見積もり式は次のとおりです。
SQL文単位の作業表最大数=b+d
オペランドの規則 指定値は,128の倍数を指定してください。128の倍数でない場合,自動的に128の倍数に切り上げられます。
  • 指定値は,128の倍数を指定してください。128の倍数でない場合,自動的に128の倍数に切り上げられます。
  • 384以上の値を指定してください。384未満の値が指定されると,自動的に384に切り上げられます。
省略値 このオペランドを省略すると,サーバ共通定義の同じオペランドの指定値が有効となります。サーバ共通定義の同じオペランドも省略すると,512が仮定されます。 このオペランドを省略すると,サーバ共通定義の同じオペランドの指定値が有効となります。サーバ共通定義の同じオペランドも省略すると,次に示す値が仮定されます。
  • 32ビットモードの場合:1024
  • 64ビットモードの場合:5120
a:↑{作業表(列情報格納用)の容量(単位:キロバイト)÷2}÷128↑×128
b:作業表(列情報格納用)の最大数
c:↑{作業表(位置情報格納用)の容量(単位:キロバイト)÷2}÷128↑×128
d:作業表(位置情報格納用)の最大数
注※
これらの項目の見積もり方法については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。

 

8) 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を指定している必要があります。
《利点》
作業表用バッファ不足(pd_work_buff_sizeオペランドの指定値不足)でUAPがエラーになるのを防げます。
《注意事項》
次に示すどちらかの条件を満たす場合は作業表用バッファを増分しません。
  • pd_work_buff_expand_limitオペランドを指定しない
  • pd_work_buff_expand_limitオペランドの値≦pd_work_buff_sizeオペランドの値
《オペランドの規則》
指定値は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を指定する