ビュー・オブジェクト・ウィザード - 「チューニング」ページ

「チューニング」ページを使用して、アプリケーションのパフォーマンスをチューニングします。

フェッチ・モード
使用する時点でデータベースからデータを取得する場合は、「必要に応じて」を選択します(デフォルト)。すべてのデータを同時に取得する場合は、「同時」を選択します。フェッチ・モードは、JDBCの結果セットから行をフェッチする方法を制御します。SQL問合せの実行後、ビジネス・ロジック層は結果セットから行データをフェッチします。

「必要に応じて」を指定した場合、結果セットはオープンされたままになり、ユーザーが行セット内をナビゲートしたときに行がフェッチされます。ユーザーが行セットの終わりに達すると、結果セットがクローズされます。行数が多く、アプリケーションでは一部の行しか使用されない可能性が高い場合などには、このオプションが役立ちます。

「同時」を指定した場合、ユーザーが行セットをナビゲートしなくても、結果セットからすべての行がフェッチされます。すべての行がフェッチされた後、結果セットがクローズされます。行数が少ない場合などには、このオプションが便利です。

「同時」を指定した場合は、データ・フェッチのペナルティがすべて同時に実施されます。「必要に応じて」を指定した場合、ペナルティは段階的に適用されます。

行セット内の行数が比較的少なく、ビュー・オブジェクトでオープンされている行セットの数が多い場合などは、「同時」を使用してください。これにより、JDBCの結果セットを使い切ることを回避できます。「必要に応じて」を指定した場合に、オープンされる(終わりまでナビゲートしていないのでオープンされたままの)行セットの数が多すぎると、結果セットが足りなくなり、DMLExceptionがスローされる可能性があります。(必要な場合は、jbo.max.cursorsのランタイム・パラメータの値を大きく設定できます。)これに対し、結果セットに含まれる行数が多い場合は、すべての行を取得する負荷がかかるため、「同時」はお薦めできません。

ページごとの反復モード
ユーザーがクライアント上で1ページずつデータをスクロール表示する際(一連のWebページを表示する場合など)、デフォルトの動作では、最終ページ全体にデータが表示されます。この結果、直前のページで表示された行が最後のページにも表示される場合があります。このデフォルトの動作を維持する場合は、「最後のページを完全なままに保持」を選択します。データを繰返し表示しないようにするには、「最後のページを部分的で許可」を選択します。
フェッチ・サイズ
フェッチ・モードを「必要に応じて」に設定した場合の、1回にフェッチする(JDBCで)行数を指定します。(フェッチ・モードを「同時」に設定した場合、この値は無視されます。)0より大きい数を指定できます。デフォルトは1です。
最大フェッチ・サイズ
フェッチする最大行数を指定します。たとえば、問合せ結果セットが2000行であり、最大フェッチ・サイズを1000行に指定した場合、ビジネス・ロジック層は、合計で1000行のみをフェッチして結果セットをクローズします。-1以上の値を指定できます。デフォルトは-1で、この場合はすべての行をフェッチします。ゼロ(0)を指定した場合は、結果セット内の行をフェッチしません。
問合せヒント
(オプション)SQL問合せオプティマイザのヒントを入力します。問合せオプティマイザのヒントはOracle SQL言語の機能です。詳細は、『Oracle9i SQLリファレンス』を参照してください。

ヒントは、QueryHintプロパティを介してビュー・オブジェクトのXMLファイルに格納されます。ヒントは、ViewObjectインタフェースのメソッドsetQueryOptimizerHintおよびgetQueryOptimizerHintを使用してオーバーライドできます。詳細は、Javadocを参照してください。

実行時に、問合せが(エキスパート・モードではなく)標準モードであり、QueryHintプロパティがNULLまたは空でない場合、SELECT文の引数は次のようになります。

SELECT /*+ value-of-optimizer-hint */ ...

オプティマイザ・ヒントの値はSELECTキーワードの直後に指定し、前後にスペースを付けて/*+と*/で囲みます。

エキスパート・モードの問合せでも同様ですが、ラップするSELECT * FROM ()ラッパーにヒントを含める点が異なります。

SELECT /*+ value-of-optimizer-hint */ * FROM (...)

(Oracleによって提供されない)その他のSQLBuilder実装では、このプロパティは無視される場合があります。

受動化を使用可能にする
このチェックボックスがチェックされている場合、アプリケーション・モジュールが受動化されると、ビュー・オブジェクトが受動化されます。受動化(データベースのトランザクション状態の記録)は、アプリケーション・モジュールが(アプリケーション・モジュール・プールで)再利用されるとき、または(フェイルオーバーが有効な場合は)チェックイン時にただちに発生します。ビュー・オブジェクトに対して受動化が無効な場合も、永続属性およびエンティティ導出属性への変更は記録されますが、再度アクティブ化した時点でビュー・オブジェクトのキャッシュは空になるため、そのデータが必要な場合は問合せを再実行する必要があります。
transient属性のすべて
「受動化を使用可能にする」および「transient属性のすべて」の両方が選択されている場合、ビュー・オブジェクトの一時属性への変更がキャッシュに書き込まれます。

フェッチ・サイズおよびフェッチ・モードは、ビジネス・ロジック層でデータベースからフェッチされる行数を制御します。フェッチのパラメータは、ビュー・オブジェクトXMLファイルに格納されています。

XMLパラメータをクライアント・コード内でオーバーライドすることも、ビジネス・ロジック層のビュー・オブジェクト・コード内でオーバーライドすることもできます。oracle.jbo.server.ViewObjectImplインタフェースの次のメソッドによって、フェッチの方針(フェッチ・サイズも含め)が処理されます。

これらのメソッドは、ビジネス・ロジック層でのみ使用可能です。これに対し、(ViewObjectインタフェースの)MaxFetchSizeメソッドは、ビジネス・ロジック層からもクライアント・コードからも使用できます。詳細は、Javadocを参照してください。


関連項目
ビュー・オブジェクトとは
エンティティ・オブジェクトとは
ビュー属性とは
ビジネス・ロジック層におけるキャッシュ・データ処理方法
ストアド・プロシージャの使用について