[SOA] DB Adapter performance issue having 1-N Relations Table

DB Adapterでselectを実行すると応答に時間がかかるという問題に直面しました。3個の表には大量のデータが格納されていて、またたくさんの列が含まれており、これらの表をDB Adapterで取り扱おうとしていました。
Database側で主キー、外部キーによるリレーションをテーブル間に構成し、DB Adapterを再作成しましたが、やはり同じ問題が発生しました。その問題とは、ユーザがDB Adapterの「選択条件の定義」(Define Selection Criteria)のページでSQLを編集すると発生します。この問題を回避する方法を記載しておきます。
  1. <DBAdapter名>-or-mappings.xmlファイルを開く
  2. <batch-reading>true</batch-reading>を探し、trueをfalseに変更する
  3. DB Adapterウィザードを再度開き、「選択条件の定義」ページまで進み、where句を定義する。
  4. 「外部結合を使用してマスター表とディテール表の両方の単一結果セットを返す」のチェックボックスをチェックする。これによりSQLが再作成される。
  5. この新しいSQL文のwhere句を変更する。From句以前を変更しないように注意すること。
  6. 「終了」をクリックして、プロジェクトをデプロイする。
  7. アプリケーションをテストする。
TopLinkのバッチ属性読取り(デフォルトはtrue)に関して、これがtrueで、DB Adapterウィザードで「選択条件の定義」を編集した場合、1対多のリレーションを張っている表全体を全件スキャンすることがあります。
これを回避するため、バッチ読み込みをfalseに設定しました。

[訳注]この回避策はマニュアルにも記載があります。
Oracle Fusion Middlewareテクノロジ・アダプタ・ユーザーズ・ガイド 11g リリース1(11.1.1)複数の表の問合せ
http://download.oracle.com/docs/cd/E16340_01/integration.1111/b55918/adptr_db.htm#BDCEJFIB

原文はこちら。
http://blogs.oracle.com/ajaysharma/entry/db_adapter_performance_issue_having_1-n_relations_table

0 件のコメント:

コメントを投稿