項目 | pd_work_buff_mode=eachの場合 | pd_work_buff_mode=poolの場合 |
---|
利点 | 作業表バッファ長が大きいと,データ操作時に発生する作業表用ファイルへの入出力回数を削減できるため,作業表を使用するSQLの実行時間を削減できます。ただし,各サーバのプロセス固有メモリを使用するので,システム全体のメモリ量(実メモリ,仮想メモリ)を考慮して指定してください。 特にpd_work_buff_mode=eachの場合,メモリは「pd_work_buff_sizeの値×必要作業表数」分確保されます。一度確保されたプロセス固有メモリは,その後HiRDBが解放要求しても仮想メモリ上はそのプロセスに占有されてしまいます(そのプロセスがなくなるまで解放されません)。したがって,必要以上に大きな値を指定すると,ほかのプロセスで仮想メモリ不足が生じることがあります。 |
適用基準 | 大量データを検索して,結合,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に切り上げられます。
|
省略値 | - このオペランドを省略し,更にシングルサーバ定義の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ビットモードの場合)が仮定されます。
|