コンテナー管理パーシスタンスの部分列更新機能

コンテナー管理パーシスタンス (CMP) Bean メソッド ejbStore は、 パーシスタント属性フィールドのサブセットのみが変更された場合でも、 CMP Bean のすべてのパーシスタント属性をデータベースに保管していました。 この不必要な性能低下は、このリリースの製品では除去されています。

注: エンティティー Bean は EJB 3.0 モジュールではサポートされていません。
Enterprise JavaBeans (EJB) 2.x CMP エンティティー Bean の場合は、部分更新機能を使用して、データベースに対する CMP Bean のパーシスタント属性を更新する方法を指定することができます。 この機能は、 Bean 用に構成されたアクセス・インテント・ポリシーで、PartialOperation と呼ばれる Bean レベルの パーシスタンス・オプションとして提供されています。PartialOperation には、可能な値が 2 つあります。
NONE
部分更新がオフになっています。 CMP Bean のすべてのパーシスタント属性はデータベースに保管されます。これはデフォルト値です。
UPDATE_ONLY
変更された CMP Bean のパーシスタント属性に対してのみ、データベースへの変更が行われるように指定します。
部分更新の設定方法について詳しくは、コンテナー管理パーシスタント Bean の部分更新の設定を参照してください。

パフォーマンス

部分更新を実行すると、いくつかの点でパフォーマンスが向上します。
  • 照会内に列のサブセットのみがあるため、照会の実行時間が短縮されます。 列および索引が多いテーブルの方が、大きく改善されます。 テーブルに多数の索引がある場合、更新済みの列によって影響を受ける索引のみが、 バックエンド・データベースによって更新される必要があります。
  • 送信されるデータが少なくなるため、ネットワーク入出力が削減されます。
  • 非自明的にマップされる列の処理時間が節約されます。 例えば、列がコンバーター、コンポーザー、変換を使用して、入力レコードを部分的に挿入する場合です。
  • 不必要な更新トリガーの起動は除去されます。CMP Bean フィールドが変更されない場合、 対応する列にのみ依存するトリガーは起動しません。
部分更新により、パフォーマンスは向上しますが、以下のようにパフォーマンスに悪影響が出る可能性もあります。
  • ご使用のアプリケーションで異なる列による複数の組み合わせが 同じタイム・スパン中に変更される Bean に対し、部分更新を有効にした場合、 その接続用の準備済みステートメント・キャッシュの最大値に急速に達します。 結果として、ステートメント・ハンドルは、最低使用頻度に基づいて、キャッシュから除去されます。 この結果、ステートメントは繰り返し準備され、ejbStore メソッドだけでなく CMP の全機能のパフォーマンスが低下します。
  • 機能セットにキャッシュされた部分更新照会テンプレートは、メモリーの使用を増やします。 この増加は、 部分更新アクセス・インテント・オプションがオンになっている CMP Bean のフィールド数と比較して、線形です。
  • PartialOperation パーシスタント・オプションは、 バッチ更新パーシスタント・オプションと組み合わせて使用した場合、バッチ更新のパフォーマンスに影響します。 これは、それぞれの部分照会が異なるためです。部分更新照会ストリングを動的に生成するために 実行時間コストが発生します。照会フラグメントは各列に対して保管されるため、 ダーティーの CMP Bean フィールドの数に基づいて、照会フラグメントをアセンブルするための実行コストは線形です。
  • 各 CMP フィールドについて、状態確認があります (ダーティー・フラグの検査、preparedStatement setXXX メソッド呼び出しの実行など)。

部分更新の使用に関する考慮事項

ユーザーが達成したいパフォーマンスの向上は、低下が発生する可能性のあるインスタンスに対して評価する 必要があります。次のガイドラインを使用して、判断に役立てることができます。
  • 列が少数で、かつデータ型が単純であり、更新トリガーを持たない小規模なテーブルのみを伴うアプリケーションでは、部分更新によるメリットが得られない可能性があります。 パフォーマンスの向上よりも、部分照会を動的にアセンブルするためのコストの方が大きくなる可能性があります。
  • 頻繁に更新されない複素数データ型がある場合、部分更新は有益です。 複合データ型の例としては、BLOB や VARGRAPHIC、あるいは同様のバックエンドの複合型にマップされた「写真」CMP 属性を持つ Employee Bean が挙げられます。これは通常、データベース・マネージャー実装の別のロケーションに保管されます。
  • いくつかの VARCHAR タイプ列があり、その中のごく一部のみが更新される場合、部分更新が有益となる可能性があります。
  • アプリケーションが異なる列の組み合わせをランダムに更新する可能性があって、 割り当て可能な列 (非キー) の数が 5 個より多い場合は、部分操作を使用しないことをお勧めします。 これにより、異なる部分照会が生成され、準備済みステートメント・キャッシュが急速にいっぱいになります。 ただし、Bean が多数の列を持たず (4 列以下など)、複合データ型を持つ場合は、部分更新を有効にすることも検討してください。その際、照会数の増加に対応できるように、ステートメント・キャッシュ・サイズを大きくするという選択肢もあります。 ステートメント・キャッシュ・サイズを大きくする方法については、データ・ソース設定のヘルプを参照してください。
  • 列のサブセットで必要な更新トリガーがある場合、部分更新は有益です。
  • テーブルに多数の列および索引があり、ごく一部の索引のみが通常の更新の影響を受ける場合、部分更新は有益です。

制約事項

デフォルトでは、部分更新が使用可能になっているすべての CMP Bean に対して、更新照会のバッチ更新は 使用不可になっています。つまり、部分更新は、バッチ更新よりも優先されます。 削除および挿入照会のバッチ更新は、影響を受けません。

バッチ更新および部分更新パーシスタンス・オプションが同じ Bean で使用される場合、 各部分照会が異なるため、バッチ更新のパフォーマンスは影響を受けます。 JVM プロパティー -Dcom.ibm.ws.pm.grouppartialupdate=true を使用して、 類似した部分更新照会をバッチ更新にグループ化することができます。部分更新のグループ化は、1 つのトランザクションに同型の部分照会が複数ある場合にのみ役立ちます。 そうでない場合は、部分更新のグループ化はパフォーマンスに悪影響を及ぼします。 この設定は Bean レベルを基本としていないため、 オンにする場合は注意する必要があります。これは、部分更新とバッチ更新の両方が有効になっているすべての Bean に影響するため、両方の更新が有効になっているすべての Bean 間で表示される場合に、部分照会のバッチ更新でパフォーマンスが実際に向上することを確認する必要があります。

JVM プロパティーを設定するには、次のようにします。

  1. server.xml ファイルを開きます。
  2. -Dcom.ibm.ws.pm.grouppartialupdate=true の値を -Dcom.ibm.ws.pm.grouppartialupdate=false に変更します。

トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_partupd
ファイル名:cejb_partupd.html