EJBはトランザクションのやり方次第で速くなるのに…WebSphereサーバ・チューニング入門(6)(3/4 ページ)

» 2008年04月04日 00時00分 公開
[上野憲一郎日本アイ・ビー・エム]

【4】読み取り専用(Read-only)Entity Bean

 データの更新頻度が非常に低い場合やデータ更新が行われる時間が特定できるといったケースでは、「読み込み専用(read-only)Bean」の指定を行うことにより性能向上を図ることが可能です。例えば、小売業などのアプリケーションで、価格データは週に1度のみ更新されるといったシナリオが考えられます。

「読み取り専用(Read-only)Entity Bean」の設定の仕方

 AST(あるいは、RAD)を用いて、適切なEJBメソッドに「read-only」を設定します。実際には、[Beanのキャッシュ]設定の[アクティブ化]に「ONCE」を指定します(図10)。

図10 読み込み専用(read-only)Beanロード間隔の指定 図10 読み込み専用(read-only)Beanロード間隔の指定

 [ロード]の指定としては、「INTERVAL」(図10)、「DAILY」(図11)、「WEEKLY」のいずれかを指定します。そして、各ロード指定に応じて、[再ロード間隔整数]に通知を設定します。

図11 読み込み専用(read-only)Beanロード時間の指定 図11 読み込み専用(read-only)Beanロード時間の指定

 例えば、[ロード]が「INTERVAL」で[再ロード間隔整数]が 20の場合は、Beanが最後にロードされてから20分経過すると、再ロードします。[再ロード間隔整数]が 0の場合は、再ロードしません。[ロード]が「DAILY」で[再ロード間隔整数]が2300の場合は、毎晩23時に再ロードします。

【5】Partial Column Update(部分オペレーション)

 WASでは、「Partial Column Update」機能を設定することにより、CMP Entity Beanに対して部分的な更新が可能になります。CMP Beanの「ejbStore()」メソッドが呼ばれた際に、「Partial Column Update」を使用することにより、変更個所のみをDBに反映します。(図12図13

図12 Partial Column Update未使用の場合 図12 Partial Column Update未使用の場合
図13 Partial Column Updateを使用する場合 図13 Partial Column Updateを使用する場合

「Partial Column Update」の設定の仕方

 「Partial Column Update」は、AST(あるいは、RAD)を使用して設定します(図14)。

図14 部分オペレーションの設定(画像をクリックすると拡大します) 図14 部分オペレーションの設定(画像をクリックすると拡大します)

 [部分オペレーション]チェックボックスをチェックし、[UPDATE_ONLY]オプションを選択することにより設定します。

部分オペレーションと「Batch Update on EJB Update」は併用すると性能に影響

 なお、部分オペレーションの使用に際して、以下の留意点があります。前回解説した「Batch Update on EJB Update」と「Partial Column Update(部分オペレーション)」を同じBeanに対して使用する場合、性能に影響を与えます。

 というのも、「Partial Column Update」により異なる部分クエリーが発行されるようになるからです。似た部分クエリーをグループ化し、Batch Updateで使用するためには、「-Dcom.ibm.ws.pm.grouppartialupdate=true」をJVM引数に指定できます。

【6】CMP CMR Read-ahead(先行読み取りヒント)

 「CMP CMR(Container Managed Relation) Read-ahead」とは、親Beanに対する「FindByPrimary key」オペレーション実行時に、関連付けられたEntity Beanをプリロードする仕組みです。

「先行読み込み」とは?

 「Read-ahead」(先行読み込み)は、「1つのクエリー内のトランザクションに対する関連するCMP Beanを取得することにより、DBに対するアクセス回数を最小化し、パフォーマンス向上を行う」というアイデアです。つまり、要求されたCMP Beanおよび関連するBeanを読み込みます。

 例えば、ファインダー・メソッドを持つCMP Bean type AがBean Aのインスタンスを返すとします。このメソッドに対する[先行読み取りヒント]は、「RelationB.RelationC; RelationD」というように記します。これは、以下の2つの意味になります。

  1. Bean type Aは、type BとDのCMRを持つ
  2. Bean type Bは、type CとCMRを持つ

 DBからtype AのBeanを読み込むと、直接関連付けられたBとDのBeanおよび間接的に関連付けられたCのBeanも併せて読み込まれます。

「CMP CMR Read-ahead」の設定の仕方

 以下がAST(あるいは、RAD)による設定例です。

図15 [先行読み取りヒント]チェックボックスの指定(画像をクリックすると拡大します) 図15 [先行読み取りヒント]チェックボックスの指定(画像をクリックすると拡大します)
図16 先行読み取りヒント[プリロード・パス]の指定 図16 先行読み取りヒント[プリロード・パス]の指定

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。