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では問合せアセットが返すアセット・タイプ(Article
やImagefile
など)のプライマリ記憶域表の表名に対する結果セットが格納されます。
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 結果セットのキャッシュを制御するデフォルト・プロパティ
プロパティ: | 説明 |
---|---|
|
メモリーにキャッシュする結果セットのデフォルトの数を指定します。これは結果セットのレコードの数ではなく、結果セットの数を意味する点に注意してください。 重要: デバッグする場合を除き、このプロパティを |
|
キャッシュされる結果セットをメモリー内に保持する時間を分単位で指定します。 このプロパティを |
|
結果セットのキャッシュ内にある有効期限の計算方法を指定します。
|
表固有のプロパティ
表固有のプロパティは、デフォルト・プロパティをオーバーライドし、システムをピーク・パフォーマンスで微調整できるようにします。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プロパティ・ファイル・リファレンス』のプロパティの追加に関する項を参照してください。
プロパティ管理ツールを開き、制御する各表に表固有のプロパティを追加します。プロパティ管理ツールを参照してください。