この章では、Oracle Exalogicでの永続性アプリケーションの動作方法を最適化できる機能を有効化および構成する手順について説明します。
この章の内容は次のとおりです。
ユース・ケース
アプリケーションは、Oracle Exalogicプラットフォームの究極のパフォーマンスおよびスケーラビリティを利用してパフォーマンスを向上しようとします。
解決方法
実装は、必要に応じてExalogicの最適化を有効にすることによって達成されます。
コンポーネント
Oracle Exalogic
TopLink 12c (12.1.3.0.0)以上
WebLogic Server 12c (12.1.3.0.0)以上
サンプル
サンプルへのリンクは、第25.3項「その他の参考資料」を参照してください。
Oracle Exalogicは、究極のパフォーマンス、信頼性およびスケーラビリティの基礎となっています。永続性アプリケーションはこの基礎を利用できます。そのためには、パフォーマンスの向上およびリソース使用率の向上を提供する最適化を使用します。最適化には、Exalogic固有のチューナとプロファイラ、Exalogic固有のバッチ・ライター、Exalogic固有のシリアライズ・オブジェクト・ポリシーの実装、Exalogic固有のキャッシュ・コーディネーションの拡張などがあります。
注意:
|
この項のタスクは、Oracle Exalogicプラットフォームの究極のパフォーマンスおよびスケーラビリティを利用する最適化を使用する一般的な手順について説明します。
注意: 常にパフォーマンス・テストを使用して、デプロイ済のアプリケーションの最適化を検証する必要があります。 |
自動チューニングは、特定の目的に対するJPAおよびセッション構成をアプリケーションが自動的にチューニングできるようにする最適化です。自動チューナは、複数設定の構成用または動的チューニング実行用の1フラグ構成オプションを容易にします。更新と読取りの挿入が混在しているマイクロベンチマーキング・テストで自動チューニングを使用すると、CPU使用量(中間層とデータベース層の両方)とメモリー使用量の低下が示されました。CRUDおよび問合せのマイクロベンチマーク・テストで自動チューニングを使用すると、最適化を使用しなかったテストに対してパフォーマンスの向上が示されました。自動チューニングの詳細は、「自動チューニング」を参照してください。
TopLinkには、Exalogicプラットフォーム用に最適化された構成を提供する自動チューナが含まれています。これは、複数のパフォーマンス機能を有効化し、Exalogic固有のプロファイラを有効化します。このプロファイラはアプリケーションの起動段階を監視し、n+1の問合せ実行の問題をトリガーする問合せを検出します。次にこれらの問合せを最適化してバッチ・フェッチを使用します。バッチ・フェッチを使用できない動的問合せの場合、これらの問合せをさらに分析し、実行時状態のマシンを定義して、これらの問合せを検出して最適化します。プロファイラの詳細は、「パフォーマンス最適化の推奨事項およびヒント」を参照してください。
Exalogicのチューナを使用している場合、次の永続性ユニットのプロパティがデプロイメントの前に設定されます。
注意: プロパティが明示的に設定された場合(persistence.xml ファイルで設定された場合など)、これがExalogicのチューナによって自動的に設定されたプロパティよりも優先されます。 |
WEAVING_EAGER = true CACHE_SIZE_DEFAULT = 1000 QUERY_CACHE = true ORDER_UPDATES = true BATCH_WRITING = JDBC PERSISTENCE_CONTEXT_CLOSE_ON_COMMIT = true PERSISTENCE_CONTEXT_FLUSH_MODE = Commit DDL_GENERATION_INDEX_FOREIGN_KEYS = true PROFILER = oracle.toplink.exalogic.tuning.TuningAgent FREE_METADATA = true
接続プールが使用されると、セッションの文キャッシュが自動的に有効化されます。また、Exalogicのチューナは、デプロイしてセッションに接続した後、Exalogic固有のDynamicParameterizedHybridBatchWritingMechanism
バッチ・ライターを使用するようにセッションを自動的に設定します。バッチ書込みの詳細は、「タスク4: Exalogicでの異機種間バッチ書込みの構成」を参照してください。
Exalogicのチューナを有効にするには、persistence.xml
ファイルのeclipselink.tuning
プロパティの値としてExaLogic
を指定します。次に例を示します。
<property name="eclipselink.tuning" value="ExaLogic"/>
Oracle WebLogic Serverでは、Exalogicの自動チューナは、コンソールで「ドメイン構成」タブ、「一般」タブを使用するか、または「Exalogic最適化の有効化」オプションを選択して有効にできます。あるいは、DomainMBean.ExalogicOptimizationsEnabled
MBean属性を使用して有効にできます。
シリアライズ・オブジェクト・ポリシーによって、TopLinkは私有の(およびネストされた私有の)エンティティおよび要素コレクションとともに、データベースの追加フィールドにエンティティ・オブジェクト全体(バイナリ形式)を書き出すことができます。シリアライズ・オブジェクト・ポリシーは、読取り専用またはほぼ読取り専用のアプリケーションに最適で、すべての依存エンティティおよび要素コレクションをロードするエンティティにのみ使用します。パフォーマンスが最も向上するのは、多数のグラフ・レベルがあるデータ・モデルです。ほとんどの単純なオブジェクトでは、シリアライズ・オブジェクト・ポリシーを使用するとパフォーマンスが低下します。
シリアライズ・オブジェクト・ポリシーの構成および最適な使用時期の詳細は、「シリアライズ・オブジェクト・ポリシー」を参照してください。
TopLinkには、Exalogicプラットフォームで使用するためのoracle.toplink.exalogic.sop.SerializedObjectPolicy
実装が含まれています。このポリシーを使用するには、@SerializedObject
注釈をエンティティまたはマップされたスーパークラスに含め、実装で渡します。次に例を示します。
@Entity @SerializedObject(oracle.toplink.exalogic.sop.SerializedObjectPolicy.class) @OptimisticLocking(cascade = true) public class Employee implements Serializable {... @Entity @SerializedObject(oracle.toplink.exalogic.sop.SerializedObjectPolicy.class, column = @Column(name="ADDR_SOP")) @OptimisticLocking(cascade = true) public class Address implements Serializable {...
キャッシュ・コーディネーションは、分散セッション間で変更を同期します。すべてのアプリケーションでデータの整合性を維持するアプリケーション・サーバー・クラスタでは、キャッシュ・コーディネーションが最も有効です。キャッシュ・コーディネーション使用の詳細は、「キャッシュ・コーディネーションの使用」を参照してください。
キャッシュ・コーディネーションは、ExalogicおよびWebLogic Serverに対して最適化されていて、これらのプラットフォームでの実行から自然にメリットを受けます。WebLogic Server JMSと統合すると(JMSでキャッシュ・コーディネーションを使用している場合)、ExalogicのJMSでの向上を利用できます。また、Exalogicでは、TopLinkアプリケーションは、キャッシュ・コーディネーションにWebLogic Serverクラスタを自動的に使用できます。追加の構成は必要ありません。このことによって、アプリケーションは、Infinibandで実行するように最適化されたWebLogic Serverクラスタ・メッセージングを利用できます。
最後に、WebLogic Serverでのキャッシュ・コーディネーションは、Portable Object Format (POF)シリアライズを使用するように構成できます。POFシリアライズは、他のシリアライズ形式より領域と時間の両面で効率を向上させるように設計されています。
キャッシュ・コーディネーションでPOFを使用するには、eclipselink.cache.coordination.serializer
プロパティをpersistence.xml
ファイルに含め、これをtoplink.exalogic.serializers.POFSerializer
に設定します。次に例を示します。
<property name="eclipselink.cache.coordination.serializer" value="toplink.exalogic.serializers.POFSerializer"/>
異機種間バッチ書込みは、複数の異機種間の動的SQL文を単一バッチとしてデータベースに送信して実行することを可能にする最適化です。異機種間バッチ書込みは、複数の書込みを伴うトランザクションへの使用に最適で、書込み動作に対するネットワーク・アクセスを低減します。マイクロベンチマーク・テストで異機種間バッチ書込みを使用すると、最適化を使用しなかったテストに対してパフォーマンスの向上が示されました。バッチ書込みの詳細は、「バッチ書込み」を参照してください。
TopLinkにはExalogic用に2つのバッチ書込み実装が含まれていて、複数の異機種間のパラメータ使用のSQL文を単一バッチとしてデータベースに送信して実行することが可能になっています。JDBCのバッチ書込みではこれは不可能です。したがって、かわりにSQLのパラメータを使用する無名ブロックが使用されます。カウンタ出力パラメータが使用されて、オプティミスティック・ロックの行カウントを返します。実装を次に示します。
oracle.toplink.exalogic.batch.DynamicParameterizedBatchWritingMechanism
oracle.toplink.exalogic.batch.DynamicParameterizedHybridBatchWritingMechanism
注意: DynamicParameterizedHybridBatchWritingMechanism バッチ・ライター実装は、Exalogic自動チューナを使用すると自動的に有効になります。「タスク1: Exalogicの自動チューナの有効化」を参照してください。 |
DynamicParameterizedHybridBatchWritingMechanism
バッチ書込み実装を明示的に有効にするには、ExaLogic
に設定されたeclipselink.jdbc.batch-writing
プロパティおよびpersistence.xml
ファイルのeclipselink.jdbc.batch-writing.size
プロパティを含めます。次に例を示します。
<property name="eclipselink.jdbc.batch-writing" value="ExaLogic"/> <property name="eclipselink.jdbc.batch-writing.size" value="150"/>
この実装もプロパティの値として明示的に入力できます。次に例を示します。
<property name="eclipselink.jdbc.batch-writing" value="oracle.toplink.exalogic.batch. DynamicParameterizedHybridBatchWritingMechanism"/> <property name="eclipselink.jdbc.batch-writing.size" value="150"/>
この章のソリューションが実装されているその他のテクノロジおよびツールの詳細は、次の参考資料を参照してください。
次のコード例およびJavaDocの参考資料を参照できます。
コード例
『Oracle TopLink Java APIリファレンス』で次のAPIに関する項を参照してください。
oracle.toplink.exalogic.tuning.ExalogicTuner
oracle.toplink.exalogic.tuning.TuningAgent
oracle.toplink.exalogic.sop.SerializedObjectPolicy
org.eclipse.persistence.annotations.Cache
org.eclipse.persistence.sessions.coordination
oracle.toplink.exalogic.remote.OJVMConnection
oracle.toplink.exalogic.batch.DynamicParameterizedHybridBatchWritingMechanism