Entity Beanのチューニングについて、説明します。
■Entity Bean呼出しの注意
Entity Beanは、レコードの情報を取得するためにメソッドを頻繁に実行します。このため、プロセス外からEntity Beanを呼び出すとIIOP通信が頻繁に発生することにより、性能が劣化します。
Entity Beanは同一IJServerのアプリケーションから呼び出すことを推奨します。
■インスタンス数
インスタンスはトランザクション内でキャッシュされます。インスタンスプールにインスタンスが存在しない場合、同一トランザクション内で使用したインスタンスのレコードデータをデータベースに反映し、そのインスタンスを別のレコードデータを格納するインスタンスとして再利用します。インスタンスが頻繁に再利用されるとデータベースにアクセスする回数が増加することによって性能に影響がありますので、性能を考慮してインスタンス数を設定してください。
インスタンス数はデータベースの検索レコード数とクライアントの同時接続数に関係します。効果的な値としては、通常検索されるレコード数の1.25倍の値を設定します。
以下に設定値の計算式を表します。
Entityインスタンス数 = a × b × 1.25 (安全率) |
例) 10クライアントが同時に100件を検索した場合
インスタンス数 = 10 × 100 × 1.25 = 1250
注) インスタンス数を増やすと、使用メモリが増えるので注意してください。
■インスタンス管理モード
Entity Beanのインスタンス管理モードによってデータベースの処理をチューニングすることができます。
以下の表に、それぞれのインスタンス管理モードと最適な処理について示します。
管理モード | 最適な処理 |
---|---|
ReadWrite | 検索を実行する時、またオンラインのデータベースを更新する時に有効 |
ReadOnly | 更新されない主要なデータを検索(参照)する時に有効 |
Sequential | 大量のデータを一括処理する時に有効 |
■CMPデータのstream転送
CMPで使用するEntity Beanで、JDBCのサイズ制限以上のデータを扱う場合は、Interstage管理コンソールの以下で設定してください。
[システム] > [ワークユニット] > “ワークユニット名” > “EJBモジュール” > “EJBアプリケーション名” > [アプリケーション環境定義]タブを開き、CMFマッピング定義の「CMPデータのstream転送」に“する”を設定します。また、ejbdefexport/ejbdefimportコマンドを使用して設定することもできます。詳細は“J2EE ユーザーズガイド”の“運用コマンドを使用してカスタマイズする方法”を参照してください。デフォルトは“しない”です。
■CMP2.0の複数件検索高速化
CMP2.0 Entity Beanで複数件finderメソッドを実行した場合に、レコードのデータを一度にすべてロードするオプションを提供しています。
全データを、DBMSからロードするような処理の場合にも、高速にDBMSからデータをロードできます。
詳細は、“J2EEユーザーズガイド”の“Entity Beanの最適化処理”の“CMP2.0の複数件検索時の高速化”を参照してください。
■CMP1.1の複数レコードの一括更新
CMP1.1の複数レコードの一括更新の設定は、Interstage管理コンソールの[システム] > [ワークユニット] > “ワークユニット名” > “EJBモジュール” > “EJBアプリケーション名” > [アプリケーション環境定義]タブの[Interstage拡張情報]で設定します。「複数レコードの一括更新」で“する”を選択してください。デフォルトは“する”です。
また、ejbdefexport/ejbdefimportコマンドを使用して設定することもできます。詳細は“J2EE ユーザーズガイド”の“運用コマンドを使用してカスタマイズする方法”を参照してください。
設定を行ったCMP1.1 Entity Beanはデータベースの更新を行う時に、以下のAPIを利用して一括更新を行います。
java.sql.PreparedStatementクラスのaddBatchメソッド
使用するデータベース、および、JDBCドライバがJDBC2.0バッチ更新機能をサポートしている必要があります。
JDBC2.0バッチ更新機能が未サポートのデータベース、および、JDBCドライバを使用した場合は、通常のデータベースへの更新処理を行います。
「インスタンス管理モード」が“Read-Only”の場合、データの更新自体が行われないため、「複数レコードの一括更新」の設定は無効となります。
「複数レコードの一括更新」は、分散トランザクションを使用しない場合にだけ有効です。分散トランザクションを使用する場合、通常のデータベースへの更新処理を行います。
CMP1.1 Entity Beanでstream転送を行う場合、データの更新に失敗する場合があります。その場合は「複数レコードの一括更新」を“しない”に変更してください。
■CMP1.1のbyte配列更新判定
CMP1.1 Entity Beanでbyte配列を使用する場合に、byte配列のデータが更新されているかの判定方法を設定できます。
設定は、Interstage管理コンソールの[システム] > [環境設定] の 詳細設定から[EJBサービス詳細設定]タブで「CMP1.1のbyte配列更新判定」で行います。また、isj2eeadminコマンドを使用して設定することもできます。