2.8.4 大量処理用メモリ管理機能

一時的に大量のメモリを消費するトランザクションが発生すると,通常のオンライン中には使用しないメモリをTP1/EEが大量に確保し続けるおそれがあります。そのため,このようなトランザクションが発生する場合は,大量処理用メモリ管理機能を使用します。

大量処理用メモリ管理機能を使用すると,該当するトランザクションの処理中に要求されたメモリを,初期確保する領域からではなく別のメモリ領域から割り当てます。大量処理用メモリ管理機能で割り当てられた領域は,該当するトランザクションが終了したあとで,OSに解放されます。

<この項の構成>
(1) 使用する領域の種類と定義
(2) 機能の使用開始と終了
(3) 留意事項

(1) 使用する領域の種類と定義

大量処理用メモリ管理機能で使用する領域を次の表に示します。

表2-26 大量処理用メモリ管理機能で使用する領域

項番名称TP1/EEが管理するメモリリソースとの対応定義
1大量処理用システム領域MPSPOOL
  • すべてのバッファ
  • システム用ワーク領域
  • XTC用ワーク領域(XTCPOOL)
  • XDB用ワーク領域(XDBPOOL)
メモリ関連定義のmemory_mdpsys_area_sizeオペランド
2大量処理用ユーザ領域MPUPOOLユーザ用ワーク領域メモリ関連定義のmemory_mdpusr_area_sizeオペランド

なお,大量処理用システム領域と大量処理用ユーザ領域は,どちらか一方だけを使用することもできます。

(2) 機能の使用開始と終了

UAPでee_mem_mdpstart関数を発行すると,大量処理用メモリ管理機能の使用を開始します。また,該当するUAPがリターンしてトランザクションが終了するときに,大量処理用メモリ管理機能も終了し,使用中のセグメントが存在しない領域をOSに解放します。なお,使用中のセグメントが存在する場合は,使用中のセグメントがすべて返還されてから,領域ごとにOSに解放します。

複数のUAPで並行して大量処理用メモリ管理機能を使用する場合,大量処理用システム領域および大量処理用ユーザ領域はそれぞれのUAPで共有します。この場合,領域の解放は,並行して動作するUAPのうち,最後のUAPがリターンしてトランザクションが終了してから行われます。

(3) 留意事項

大量処理用メモリ管理機能を使用する際の留意事項を次に示します。

■スレッドダウン時の動作
大量処理用メモリ管理機能を使用中のスレッドでスレッドダウンが発生した場合,該当するスレッドで使用された未返還のTASK属性のセグメントを強制解放するときに,大量処理用メモリ管理機能を終了します。
■XTC用ワーク領域およびXDB用ワーク領域の動作
CLサーバ(クラスタ連携関連定義のcluster_modeオペランドにYを指定)の場合,XTCワーク領域およびXDBワーク領域の動作が次のとおりになります。
  • 追加確保した領域については,使用中のセグメントが存在しなくなった時点で,オンライン中に該当する領域をOSに解放(free関数を発行)します。
  • 待機系では,メモリ関連定義のmemory_xtc_limit_sizeオペランドおよびmemory_xdb_limit_sizeオペランドの設定値が無効になります。なお,設定値を超えるセグメント要求があった場合,設定値を無視して領域を追加確保(malloc関数を発行)します。
なお,ee_mem_mdpstart関数を発行したかどうかに関係なく,オンライン中は常にこの動作となります。