実行時におけるメモリー内の行の管理について

ビジネス・ロジック層の稼働中には、メモリー内のキャッシュ(Javaヒープ)にビュー行が格納されます。ビジネス・ロジック層で多数の行を一度に格納する場合には、メモリーが不足することのないようにします。このようにするには、行数が一定のサイズに達した場合に、データベースに対する行のオーバーフローをディスクに保存するように指定します。この機能を、ビュー行の自動書出しと呼びます。

属性数の多い行、または大量のデータが格納されている行は、データ量の少ない行に比べて、メモリーの使用量が増えます。

メモリー内における行のノードとしてのグループ化

ビュー行の自動書出しは、配列ではなく、より効率のよいバイナリ・ツリーとして実装されています。ビュー行の自動書出しが有効になっている場合は、行はノードに保存されます。行セットごとのアクティブなノード(メモリー内のノード)の最大数、および各ノードに含めることができる最大行数を指定できます。

Figure that shows three nodes with ten rows each.

デフォルトでは、アクティブなノードは10個で、各ノードの最大行数は70です。

あるノードがいっぱいになり、別のノードが追加されると、ノードは2つのノードに分割され、約半数の行が新しいノードに移動します。したがって、行数が最大行数の約半分のノードが2つできます。

ノードから行を削除すると、ビジネス・ロジック層では、2つのノードから1つのノードを作成するために、そのノードを同じタイプの他のノードとマージできるかどうかをチェックします。

ビュー・オブジェクト・インスタンスごとに、アクティブなノードの数および行数を指定します。オプションとして、これらの値は、ビュー・オブジェクトのXMLファイルでオーバーライドできます。別の最大値が必要な場合は、値をオーバーライドする必要があります。

指定するノード数および行数は、概算値であることに注意してください。たとえば、最大行数に10行、ノードの最大数に2を指定すると、ビジネス・ロジック層で必要になった場合には、メモリー内でそれぞれ5行を含む3つのノードが作成される可能性があります。

データベース表への自動書出し行の格納

アクティブなノード数がメモリーの許容値を超えると、自動書出しが行われます。ビジネス・ロジック層では、データベースの接続情報で指定されたスキーマと同じものを使用して表を作成し、その表に行を保存します。データベースには次の表が作成されます。

使用順に基づくアルゴリズムにより、データベースに最初に書き込むノードが決定されます。

行がいったんデータベースに保存されると、その行が要求されるまでメモリーには戻りません。データベース管理者は、使用しなくなったデータを表から手動で消去する必要があります。

現在、自動書出しがサポートされているのはOracle8i リリース8.1.7以上のデータベースのみです。これらのリリース以外のデータベースを使用している場合は、行はメモリーのみに格納されます。

ビジネス・ロジック層は自動書出しを行う際に専用のデータベース接続を使用します。接続プールを使用してデータベースへの接続数を制限する場合は、自動書出し機能によって使用する接続を考慮するようにしてください。

エンティティ・キャッシュの行への影響

ビュー行がディスクに自動書出しされると、エンティティ・キャッシュ内のビュー行が参照しているエンティティ行が解放されます。ビュー行がメモリー内に戻されると、エンティティ行も戻されます。

ただし、エンティティ行が修正されている場合は、エンティティ行はトランザクションの一部であるため解放されません。(コミットまたは中断により)トランザクションが終了すると、エンティティ行を解放できます。

したがって、エンティティ・キャッシュで使用されるメモリー量は、次の処理によって制御できます。


関連項目
実行時のメモリーにおける行の管理