照会のパフォーマンスのチューニング

照会のパフォーマンスを調整する場合は、以下の手法とヒントを使用してください。

パラメーターの使用

照会を実行する場合、照会ストリングを構文解析し、照会を実行する計画を開発する必要がありますが、両方ともコストがかかる可能性があります。WebSphere® eXtreme Scale は、照会ストリングによって照会計画をキャッシュに入れます。 キャッシュは有限サイズであるため、照会ストリングを可能な限り再利用することが重要です。 名前付きパラメーターまたは定位置パラメーターを使用しても、照会計画の再利用が促進され、パフォーマンスが向上します。

Positional Parameter Example Query q = em.createQuery("select c from Customer c where c.surname=?1"); q.setParameter(1, "Claus");

索引の使用

マップに対する適切な索引付けは、マップ・パフォーマンス全体にいくらかのオーバーヘッドをもたらしますが、照会パフォーマンスに著しい効果をもたらす場合があります。照会に関係するオブジェクト属性に索引付けを行わない場合、照会エンジンは、属性ごとにテーブル・スキャンを実行します。テーブル・スキャンは、照会実行時に最もコストのかかる操作です。照会に関係するオブジェクト属性に対する索引付けにより、照会エンジンは、不必要なテーブル・スキャンを回避でき、照会パフォーマンス全体を改善することができます。アプリケーションが最も読み取られるマップに対して照会を集中的に使用するように設計されている場合は、照会に関係するオブジェクト属性に対して索引を構成してください。マップがほとんど更新される場合は、照会パフォーマンスの改善と、マップに対する索引付けオーバーヘッドとのバランスを取る必要があります。

Plain Old Java Object (POJO) がマップ内に保管されている場合、適切に索引付けすることによって、Java リフレクションを回避できます。次の例では、予算フィールドに索引が作成済みである場合、照会は WHERE 文節を範囲見出し検索と置換します。それ以外の場合、照会では、マップ全体をスキャンし、Java リフレクションを使用して最初に予算を取得してから、予算を値 50000 と比較することによって、WHERE 文節を評価します。

SELECT d FROM DeptBean d WHERE d.budget=50000

個別照会を最適に調整する方法、および各種の構文、オブジェクト・モデル、および索引が照会のパフォーマンスにどのように影響するかについて詳しくは、照会計画を参照してください。

ページ編集の使用

クライアント/サーバー環境では、照会エンジンは、結果マップ全体をクライアントにトランスポートします。戻されるデータは、妥当なチャンクに分割される必要があります。EntityManager Query および ObjectMap ObjectQuery の両インターフェースは、結果のサブセットを戻すことを照会に許可する setFirstResult および setMaxResults メソッドをサポートします。

エンティティーの代わりにプリミティブ値を戻す

EntityManager Query API を使用すると、エンティティーは照会パラメーターとして戻されます。照会エンジンは、現在のところ、これらのエンティティーに対するキーをクライアントに戻します。クライアントが getResultIterator メソッドからの Iterator を使用して、これらのエンティティーを繰り返すとき、各エンティティーは、EntityManager インターフェース上の find メソッドで作成されたかのように、自動的に拡張され、管理されます。エンティティー・グラフ全体は、クライアント上のエンティティー ObjectMap からビルドされます。エンティティー値属性およびその他の関連エンティティーは、可能な限り解決されます。

コストのかかるグラフのビルドを回避するには、パス・ナビゲーションを使用して個々の属性を戻すように照会を変更してください。

例:

// Returns an entity
SELECT p FROM Person p
// Returns attributes SELECT p.name, p.address.street, p.address.city, p.gender FROM Person p