28 結果セットのキャッシングと問合せでの作業

結果セットのキャッシングは、システムのパフォーマンスを向上させるもう1つの手段です。CatalogManagerで結果セットを適切にキャッシュして、キャッシュからそれらの結果セットをフラッシュできるようにする問合せを作成できます。

トピック:

結果セットのキャッシングと問合せについて

結果セットのキャッシュは、CatalogManagerサーブレットによって保持されます。開発者やシステム管理者は、3つのシステム(開発、管理および配信)すべてで結果セットのキャッシングを設定します。データベースに問い合せるたびに、WebCenter Sitesではキャッシュ済または未キャッシュのいずれかの結果セットが処理されます。結果セットのキャッシングは、ご使用のデータベースの負荷を軽減し、問合せに対するレスポンス時間を改善します。

wcs_properties.jsonファイルには、すべての結果セットのサイズとタイムアウトの期間を設定するグローバル・プロパティが用意されています。表ごとのデフォルト設定をオーバーライドする、表固有のプロパティをwcs_properties.jsonファイルに追加できます。これらのカスタム・プロパティを使用すると、ピーク・パフォーマンスのシステムを微調整できます。

結果セットのキャッシングは、ご使用のデータベースの負荷を軽減し、問合せに対するレスポンス時間を改善します。必ず次のステップに従ってください。

  • wcs_properties.jsonファイルのデフォルト結果セットのキャッシング・プロパティを、開発、管理、テストおよび配信の各システムで意味のある値に設定します。

  • 表固有の結果セットのキャッシング・プロパティをwcs_properties.jsonファイルに追加し、開発、管理、テストおよび配信のすべてのシステムのパフォーマンスを微調整します。

  • すべての問合せに対して適切な表名を付け、結果セットが正しくキャッシュされ、正しくフラッシュされるようにします。

キャッシング・フレームワーク

デフォルトでは、WebCenter Sitesは、結果セットをinCacheフレームワークに格納します。オプションでハッシュ表でのキャッシングに切り替えることができます。

「キャッシング・フレームワーク間の切替え」を参照してください。

inCacheによる結果セット・キャッシングが有効になると、「システム・ツール」ノード(Adminインタフェースの「管理」タブにある)には、結果セットのキャッシュとそのコンテンツに関する統計情報を提供するinCacheツールによって結果セットが表示されます。inCacheによる結果セットのキャッシュは、inCacheによるページとアセットのキャッシュとは関係なく機能することに注意してください。inCacheフレームワーク、そのキャッシング・モデルおよびシステム・ツールの詳細は、『Oracle Fusion Middleware Oracle WebCenter Sitesの管理』キャッシュ管理の使用 - 結果セットのキャッシュに関する項を参照してください。

データベース問合せ

WebCenter Sitesデータベースに情報を問い合せるには、複数の方法があります。ここでいくつか例を示します。

  • ics.SelectTo Javaメソッド、SELECTTO XMLタグまたはics:selectto JSPタグを使用する。

  • ics.CatalogManager Javaメソッド、CATALOGMANAGER XMLタグおよびics:catalogmanager JSPタグのselectrowコマンドを使用する。

  • ics.SQL Javaメソッド、EXECSQL XMLタグまたはics:sql JSPタグを使用する。

  • ics.CallSQL Javaメソッド、CALLSQL XMLタグまたはics:callsql JSPタグを使用する。

  • WebCenter Sitesインタフェースの「検索」フォームを使用する。

  • 問合せアセットを使用する。

  • SEARCHSTATE XMLまたはJSPタグ(フレックス・アセットのみ)を使用する。

結果セットのキャッシングの仕組み

データベースに問い合せると、その問合せからの結果セットがキャッシュされます(結果セットのキャッシングが有効になっている場合)。結果セットのキャッシュは、wcs_properties.jsonファイルでのrsCacheOverInCacheプロパティの構成に基づいて、ハッシュ表またはinCacheフレームワークのいずれかになります。

表固有のプロパティは、デフォルト・プロパティをオーバーライドし、システムをピーク・パフォーマンスで微調整できるようにします。

デフォルト・プロパティは、すべての表に割り当てられているwcs_properties.jsonファイルの結果セットのキャッシング・プロパティです。

これらのプロパティは、データベースの問合せに使用されます。同じ問合せが別に実行され、最新の問合せが実行されてから表内のデータが変更されないままである場合、WebCenter Sitesはデータベースに再び問い合せるのではなく、結果セットのキャッシュから情報を提供します。キャッシュからの結果セットの提供の方が、別のデータベース検索の実行より迅速に実行されます。

結果セットは、結果セットを生成した問合せに関連付けられた表名ごとに編成されています。つまり、結果セットは表名に対してキャッシュされます。

表が更新されるたびに(WebCenter Sitesインタフェースから、またはカスタム・エレメントのCatalogManagerコマンドにより)、その表に対するキャッシュ内のすべての結果セットがフラッシュされます。結果セットは単一のJava VMと関連してキャッシュされます。Java VM間では結果セットを共有しませんが、同期機能がクラスタ内のすべてのサーバーで有効になっていれば、WebCenter Sitesではクラスタ内のすべてのJava VMにシグナルが送信され、結果セットは無効になったときにフラッシュされます。

データベースのロードの削減

結果セットのキャッシングは、様々な方法でデータベースの負荷を軽減します。たとえば、サービス提供の時点では、データベース接続は必要なく、未キャッシュの結果セットがあるときにのみ有効になります。

  • キャッシュ済の結果セットの処理では、データベース接続がオープンされません。WebCenter Sitesは、データベースに接続する前にキャッシュから結果セットの取得を試行します。適切な結果セットが存在すれば、データベースとの接続は実行されません。

  • 結果セットのキャッシングが有効になっているのに適切な結果セットがキャッシュされない場合には、WebCenter Sitesでは結果セットが取得され、キャッシュ内にオブジェクトとして格納され、データベースとの接続が解放されます。

  • 結果セットのキャッシングが有効でない場合、WebCenter Sitesではオンライン・ページが完全にレンダリングされるか、未キャッシュの結果セットがflushタグを持つスコープから明示的にフラッシュされるまで、データベースの接続をクローズできません。このような事態が発生すると、有効なデータベース接続はすぐに使い尽くされる可能性があります(比較的シンプルなページであっても)。

通常、結果セットのキャッシングはすべてのデータベース表で有効にする必要があります。キャッシュする結果セットの数やキャッシュする時間の長さを制限する必要がある場合でも、結果セットのキャッシングを全部まとめて無効にすることは逆効果になりかねません。

ノート:

ElementCatalog表の結果セットのキャッシングを無効にしないでください。無効にした場合、いずれかのエレメントでJSPを使用する場合は特に、システム・パフォーマンスが大きく低下します。

表名の指定

表に対する結果セットをキャッシュするには、必ずその表の名前を問合せに関連付けてください。それにより、WebCenter Sitesインタフェースや独自のカスタム・エレメントで表を更新するたびに、その表に関連付けられたすべての結果セットがCatalogManagerによってフラッシュされます。

表名を結果セットに対して指定する方法は、実行している問合せのタイプに応じて異なります。次の項では、最も一般的に使用されるデータベースへの問合せ方法とそのような問合せに対する表名の指定方法について説明します。

SELECTTO

ics.SelectTo Javaメソッド、SELECTTO XMLタグまたはics:selectto JSPタグを使用する場合、FROMパラメータ(句)を使用して表名を指定する必要があります。たとえば:

<SELECTTO FROM="EmployeeInfo"
  WHERE="name"
  WHAT="*"
  LIST="MatchingEmployees"/>

この場合、EmployeeInfoは問合せ先の表名であり、結果セットをキャッシュした表の名前です。EmployeeInfo表が更新されるたびに、CatalogManagerではその表に対してキャッシュされたすべての結果セットがフラッシュされます。

EXECSQL

EXECSQLにより、インラインSQL文を実行できます。TABLEパラメータを使用して、結果セットをキャッシュする表(複数可)を指定します。複数の表を指定すると(カンマ区切りリストを使用して)、結果セットはリストの最初の表に対してキャッシュされます。つまり、結果セットは、タイムアウトや最大サイズなど最初の表に指定された結果セットのキャッシュの設定に基づいてキャッシュされます。

CatalogManagerでは、指定された表が更新されると古くなった結果セットが削除されます。

たとえば、次の問合せは記事の表に対する結果セットをキャッシュします。

<EXECSQL SQL="SELECT article.headline, images.imagefile FROM article,images WHERE article.id='FTX1EE17FWB' AND images.id='FTK9384FWW'" LIST="sqlresult" TABLE="article,images"/>

CALLSQL

ics.CallSQL Javaメソッド、CALLSQL XMLタグまたはics:callsql JSPタグを使用して、SystemSQL表内に格納されているSQL問合せを呼び出すと、表名はSystemSQL表内の問合せのエントリ(行)によって設定されます。

SystemSQL表にはdeftable列があり、問合せからの結果セットをキャッシュする表名を識別します。複数の表を指定するには、deftable列に表のカンマ区切りリストを追加します。リストの最初の表は、問合せがキャッシュされる表です。

表に格納された各問合せでは、deftable列に値が存在する必要があります。値がないと、CatalogManagerで結果セットを適切に保存できなくなり、必要な場合に結果セットをフラッシュできなくなります。表名は既存の表を識別する必要があります。存在しない表名を入力したり、表名のスペルを間違えると、結果セットを適切にキャッシュできません。

WebCenter Sitesインタフェースのフォームの検索

WebCenter Sitesインタフェースのアセットを検索する際に使用する「検索」フォームは、アセットをそのタイプに基づいて検索します。検索フォームの問合せからの結果セットは、該当するタイプのアセットのプライマリ記憶域表に対して格納されます。

たとえば、avisportsサンプル・サイトで、記事という名前のアセット・タイプの結果セットはAVIArticle表に対してキャッシュされ、ページのアセットの場合はPage表に対してキャッシュされます。

問合せアセット

問合せアセットが返すことができるアセットは、1タイプのアセットのみです。問合せアセットを作成する際には、問合せアセットが「問合せの結果」フィールドに返すアセットの種類を、記事、イメージファイルなどのように指定します。

該当する問合せアセットがオンライン・サイトのページで使用されると、WebCenter Sitesでは問合せアセットが返すアセット・タイプ(ArticleImagefileなど)のプライマリ記憶域表の表名に対する結果セットが格納されます。

SEARCHSTATE

SEARCHSTATE XMLタグおよびJSPタグは、一連のフレックス・アセット(ASSETSETタグにより作成される)に適用される一連の検索絞込み条件を作成します。絞込み条件として、属性値または別のsearchstate(ネストされたsearchstate)のいずれかに基づいたフィルタ(制限)を使用できます。

SEARCHSTATEタグとASSETSETタグを使用して、フレックス・アセットまたはフレックス親アセット(定義やフレックス属性ではない)を抽出し、オンライン・ページで訪問者に表示できます。

WebCenter Sitesでは、検索状態の結果セットがフレックス・アセット・タイプの_Mungo表に対してキャッシュされます。たとえば、検索状態によって記事という名前のavisportsサンプル・サイトのフレックス・アセットが返される場合、結果セットはAVIArticle_Mungo表に対してキャッシュされます。

配信システムを構成する際には、必ずすべての_Mungo表に対する結果セットのキャッシング・プロパティを追加してください。

結果セットのキャッシュのフラッシュ

ほとんどの場合、データはCatalogManager APIによってデータベースに書き込まれ、必要に応じて結果セットのキャッシュがフラッシュされます。CatalogManagerでは、その表に対してキャッシュされたすべての結果セットをフラッシュできます。あるいは、書込み先の表に対してキャッシュされた結果セットをフラッシュできます。この他にも学習しておくべきことがあります。

たとえば:

  • WebCenter Sites Explorerを使用して表(SiteCatalog表、ElementCatalog表など)に行を追加する場合、該当する表に対してキャッシュされたすべての結果セットがフラッシュされます。

  • WebCenter Sitesインタフェース内のフォームを使用してアセット、ソース、カテゴリ、ワークフロー・プロセス、ユーザー、ACLなどを追加または編集する場合、書き込まれた表に対してキャッシュされた結果セットがフラッシュされます。

  • 自分のエレメント内にあるCatalogManagerのコマンドを使用して単一の表を更新する場合、該当する表に対してキャッシュされた結果セットは自動的にフラッシュされます。

  • 自分のエレメント内にあるCatalogManagerのコマンドを使用して複数の(結合された)表を更新する場合、その結合された表に対してキャッシュされた結果セットは自動的にフラッシュされます。

  • CALLSQLタグを使用してSystemSQL表に格納されているSQL文を実行すると、deftable列で指定された表(複数可)に対してキャッシュされた結果セットが自動的に更新されます。

キャッシング・フレームワーク間の切替え

wcs_properties.jsonファイルでrsCacheOverInCacheプロパティをtrueまたはfalseに設定して、inCacheフレームワークとハッシュ表フレームワークとを切り替えることができます。

inCacheに関する結果セットのキャッシングは、次の条件に一致すると有効になります。

  • linked-cache.xml構成ファイルがアプリケーション・サーバーのクラスパス(WEB-INF/classesディレクトリ)に格納されている場合。

  • rsCacheOverInCacheプロパティ(wcs_properties.json内)がtrueに設定されている場合。

結果セットのキャッシングの戦略およびプロパティについて

データベース用に結果セットのキャッシングを構成する前に、配信システムのパフォーマンスを最大限に高めるにはデータベース表のプロパティをどのように構成すればよいかについて、チームおよびデータベース管理者と話し合います。デフォルトのプロパティは、表の結果セットのキャッシュを制御します。表固有のプロパティを使用すると、ピーク・パフォーマンスのシステムを微調整できます。

次のトピックでは、すべての表と特定の表について結果セットのキャッシング・プロパティを計画して使用するプロセスについて説明します。

結果セットのキャッシング戦略の計画作成

データベースに対して結果セットのキャッシングを構成する前に、WebCenter Sitesデータベース内のすべての表のスプレッドシートを作成し、開発者とデータベース管理者のチームを作り、開発、管理、テストおよび配信のすべてのシステムについての設定内容を検討します。戦略の1つとして、類似表の大きなグループに対してデフォルトのプロパティを特定し、例外の表固有のプロパティを追加します。ただし、配信システムを調整して最高のパフォーマンスを得るには、データベース内の各表でカスタム・プロパティを作成する必要があると考えられます。

ノート:

com.fatwire.logging.cs.cache.resultsetプロパティを設定すると、結果セットのキャッシュに関するデバッグ・メッセージがWebCenter Sitesログ・ファイルに書き込まれます。logging-config.xmlでプロパティを設定します。

デフォルト・プロパティ

この表は、すべての表に割り当てられる、WebCenter Sitesのwcs_properties.jsonの結果セットのキャッシング・プロパティについて説明しています。表固有のキャッシング・プロパティが表に割り当てられていなければ、これらのプロパティが表の結果セットのキャッシュを制御します。同一のプロパティが、inCacheとハッシュ表の両方で結果セットのキャッシングに有効となります。Adminインタフェース内のプロパティ管理ツールを使用して、WebCenter Sitesのwcs_properties.jsonファイル内のプロパティの値を変更します。プロパティ管理ツールの使用の詳細は、「WebCenter Sitesのツールおよびユーティリティの概要」を参照してください。

表28-1 結果セットのキャッシュを制御するデフォルト・プロパティ

プロパティ: 説明

cc.cacheResults

メモリーにキャッシュする結果セットのデフォルトの数を指定します。これは結果セットのレコードの数ではなく、結果セットの数を意味する点に注意してください。

重要: デバッグする場合を除き、このプロパティを0または-1に設定しないでください。その値に設定すると、WebCenter Sitesインタフェースはアセットを適切に保存できなくなります。(このプロパティを0または-1に設定すると、独自のキャッシング・プロパティを構成していないすべての表で結果セットのキャッシングが無効になります。)

cc.cacheResultsTimeout

キャッシュされる結果セットをメモリー内に保持する時間を分単位で指定します。

このプロパティを-1に設定すると、独自のキャッシング・プロパティを構成していない表のタイムアウト値がなくなります。

cc.cacheResultsAbs

結果セットのキャッシュ内にある有効期限の計算方法を指定します。

  • このプロパティがtrueに設定すると、有効期限が絶対となります。たとえば、cc.cacheResultsTimeoutが5分に設定されていると、結果セットがキャッシュされた5分後に、結果セットはキャッシュからフラッシュされます。

  • このプロパティをfalseに設定すると、有効期限はそのアイドル時間に基づきます。たとえば、cc.cacheResultsTimeoutを5分に設定する場合、結果セットが最初にキャッシュされた後の5分ではなく、最後にリクエストされた後の5分で、結果セットはキャッシュからフラッシュされます。

表固有のプロパティ

表固有のプロパティは、デフォルト・プロパティをオーバーライドし、システムをピーク・パフォーマンスで微調整できるようにします。CatalogManagerでは、表28-1で説明したデフォルト・プロパティを使用して、表固有の結果セットのキャッシング・プロパティが含まれているかどうかを確認するためにwcs_properties.jsonファイルがチェックされます。

WebCenter Sitesデータベースの各表について3つの結果セットのキャッシング・プロパティを作成できます。表固有のプロパティは、デフォルト・プロパティと同様に動作します(詳細は表28-1)。

表固有のプロパティの構文は、次のとおりです。

cc.<tablename>CSz=<number of resultsets>
cc.<tablename>Timeout=<number of minutes>
cc.<tablename>Abs=<true or false>

ノート:

アセット・タイプがリビジョン追跡で有効になっていたり、アセット・バージョンの結果セットをキャッシュしたりする場合、前述のプロパティを使用しますが、<tablename>の後に_tを追加します。

cc.<tablename>_tCSz=<number of resultsets>
cc.<tablename>_tTimeout=<number of minutes>
cc.<tablename>_tAbs=<true or false>

『Oracle Fusion Middleware Oracle WebCenter Sitesプロパティ・ファイル・リファレンス』プロパティの追加に関する項を参照してください。

プロパティ管理ツールを開き、制御する各表に表固有のプロパティを追加します。プロパティ管理ツールを参照してください。