Office SharePoint Server 2007 のキャッシュ

この記事の内容 :

  • 出力キャッシュ

  • オブジェクト キャッシュ

  • BLOB のディスク ベース キャッシュ

Microsoft Office SharePoint Server 2007 には、Web サイトのパフォーマンスを最大化する高度なキャッシュ機能が組み込まれています。この記事では、使用できる各種のキャッシュと、個別の展開要件に合わせてキャッシュを最適化する方法について説明します。

次の表に、使用可能なキャッシュの種類と、各種類のキャッシュの使用場所を示します。

使用するキャッシュの種類 使用場所 備考

出力キャッシュとキャッシュ プロファイル

個々のページ レベル

新しいコンテンツを頻繁に提供する必要のない、アクセス数の多い Web サイトに適しています。

オブジェクト キャッシュ

個々の Web パーツ コントロール、フィールド コントロール、およびコンテンツ レベル

クロス リスト クエリ キャッシュとナビゲーション キャッシュが含まれます。

バイナリ ラージ オブジェクト (BLOB) のディスク ベース キャッシュ

個々の BLOB レベル

BLOB として保存される、画像ファイル (.gif, .jpg, .js, .css など)、サウンド ファイル、コード ファイルをサポートします。

出力キャッシュ

Office SharePoint Server 2007 では、ASP.NET 2.0 に備わる出力キャッシュ テクノロジを利用して、ページ コンテンツをいつどのように提供するかを管理します。出力キャッシュを適切に使用することで、スループットを大きく改善し、ユーザー応答時間を大幅に短縮できます。

サイトで ASP.NET を有効にした場合、各 Web ページで実行時に生成された HTML マークアップは、指定したキャッシュ プロファイルに基づいて ASP.NET 出力キャッシュにキャッシュされます。アクセス数の多い Web サイトでは、頻繁にアクセスされるページを 1 回につき 1 分間でもキャッシュすることで、スループットを大幅に向上させることができます。ページが出力キャッシュでキャッシュされると、同等の権限を持つユーザーがそれ以降にそのページを要求したときに、出力キャッシュからページが提供されます。指定のキャッシュ期間の間は、そのページを作成したコードやコントロールは実行されません。

注意

出力キャッシュをサイトやサイト コレクションで使用できるのは、サイト コレクションで Office SharePoint Server 発行インフラストラクチャ機能が有効になっており、なおかつサイトで Office SharePoint Server 発行機能が有効になっている場合に限られます。サイト コレクションの出力キャッシュを有効にして構成するには、サイト コレクションの [サイトの設定] ページで [サイト コレクション出力キャッシュ] をクリックし、サイトの [サイトの設定] ページで [サイト出力キャッシュ] をクリックします。サイト コレクションで Office SharePoint Server 発行インフラストラクチャ機能が有効になっておらず、サイトで Office SharePoint Server 発行機能が有効になっていない場合、[サイトの設定] ページには [サイト コレクション出力キャッシュ] および [サイト出力キャッシュ] のリンクは表示されず、出力キャッシュの有効化や構成を行うことはできません。

   

出力キャッシュの有効化の詳細については、「出力キャッシュとキャッシュ プロファイル」(https://go.microsoft.com/fwlink/?linkid=78928&clcid=0x411) を参照してください。

出力キャッシュに関する考慮事項

ページおよびページ アイテムの表示パフォーマンスを向上させるために出力キャッシュを使用する場合、出力キャッシュを実装する利点と制限事項について検討しておきます。

次のような利点があります。

  • 出力キャッシュは、頻繁にコンテンツを更新する必要のない Web サイトに適しています。そのような環境では、データベースにアクセスしたり、Web ページの HTML マークアップを最初に作成したコードやコントロールを再度実行したりすることなく、キャッシュされているコンテンツをさまざまなユーザーに表示できます。

  • 出力キャッシュは、匿名ユーザーに対しても、認証されたユーザーに対しても使用できますが、最も効果的なのは匿名アクセスの場合です。Web サイトの一部またはサイト全体で匿名ユーザー アクセスが適切であり、利用可能な場合は、匿名ユーザー アクセスを有効にしてください。

次のような制限事項があります。

  • 出力キャッシュでは、キャッシュ対象ページの HTML マークアップをキャッシュするたびに、メモリが使用されます。システムのページングなど、メモリに関する問題を回避するのに十分な容量を備えた物理メモリを実装してください。

  • 複数の Web サーバーを使用する場合、出力キャッシュにより一貫性が損なわれる可能性があります。要求のたびに更新をチェックしないように、キャッシュ プロファイルを構成できます。たとえば、元の Web ページが更新されてから 60 秒経過するまで、出力キャッシュ内の Web ページのバージョンに加えられた変更を無視するようにプロファイルを構成できます。トポロジ内に Web サーバーが 2 台ある場合、ユーザーの要求のルーティングに使用されるロード バランサによっては、ページが一方のサーバーにより表示されてから 60 秒経過する前に次の要求がもう一方のサーバーにルーティングされると、コンテンツの表示に食い違いが生じる可能性があります。キャッシュ プロファイルで変更のチェックを有効にした場合、出力キャッシュの効率が低下します。

  • サイト コレクションに対する書き込み権限を持つユーザーに対して出力キャッシュを有効にすると、出力キャッシュされたページが期限切れになるまでの間、これらのユーザーはそのサイト コレクション内の Web ページの最新データを表示できなくなります。これは、通常、ユーザーが変更または表示している Web ページのコンテンツに直接影響することはありませんが、リストまたはライブラリのロールアップ データ (ドキュメント ライブラリ Web パーツで表示されるデータなど) に影響を及ぼす可能性があります。そのため、書き込み権限を持つユーザーが最新の情報をすべて表示できるようにする場合は、読み取り権限を持つユーザーに対してのみ出力キャッシュを有効にする必要があります。

出力キャッシュの動作

次のレベルで出力キャッシュの動作を指定できます。

  • サイト コレクション

  • サイト

  • ページ レイアウト

所定のファーム、サイト コレクション、またはサイトの管理者は、異なるキャッシュ プロファイルを適用することで、各自が管理者特権を保持しているレベルでのキャッシュの動作を最適化できます。たとえば、サイトのホーム ページが最も頻繁にアクセスされる場合は、ホーム ページに一意のページ レイアウトを使用することで、その一意のページ レイアウトに特別なキャッシュ プロファイルを適用し、サイト コレクション全体のキャッシュ動作よりも優先させることができます。一方で、ページ レイアウトのキャッシュ プロファイルに長いキャッシュ期間を設定できます。こうした操作により、パフォーマンスよりも適時性が重視されるホーム ページでは、データの適時性を最適化できます。システム内の他のページに、キャッシュ期間の短い別のキャッシュ プロファイルを使用することもできます。

検索結果のキャッシュ

ユーザー認証を行う環境では、検索結果は絶対にキャッシュしないでください。検索結果をキャッシュすると、機密情報が未承認のユーザーに公開されるおそれがあります。検索クエリでは、結果セットをフィルタリングし、現在のユーザーが使用できる情報のみを表示します。ただし、検索結果をキャッシュした場合は結果セットをフィルタリングするコードが使用されないので、未承認のユーザーに対し、アクセスが許可されていない結果が表示される可能性があります。一方、匿名環境では、すべての検索結果が未認証の要求の結果なので、このことは問題になりません。

サイト コレクションで出力キャッシュを有効にした場合、次の手順を実行することで、検索結果ページ レイアウトを無効にすることができます。

検索結果ページ レイアウトを無効にする

  1. サイト コレクションのトップレベル サイトで、[サイトの操作] メニューの [サイトの設定] をポイントし、[すべてのサイト設定の変更] をクリックします。

  2. [サイトの設定] ページの [サイト コレクションの管理] セクションで、[サイト コレクション出力キャッシュ] をクリックします。

  3. [サイト コレクションの出力キャッシュの設定] ページで、[ページ レイアウトで、別のページ出力キャッシュ プロファイルを使用できるようにする] チェック ボックスをオンにし、[OK] をクリックします。

  4. [サイトの設定] ページの [ギャラリー] セクションで、[マスタ ページとページ レイアウト] をクリックします。

  5. [マスタ ページ ギャラリー] ページで [SearchResults.aspx] をポイントし、表示される矢印をクリックします。次に、表示されるメニューの [プロパティの編集] をクリックし、表示されるダイアログ ボックスで [OK] をクリックします。

  6. [マスタ ページ ギャラリー: SearchResults] ページの [認証キャッシュ プロファイル] の一覧で、[無効] をクリックし、[OK] をクリックします。

  7. [マスタ ページ ギャラリー] ページで [SearchResults.aspx] をポイントし、表示される矢印をクリックして、表示されるメニューの [チェックイン] をクリックします。

  8. [チェックイン] ページで、[メジャー バージョン (発行)] を選択し、[OK] をクリックします。この特定のページ レイアウトを使用する検索結果がキャッシュされなくなります。

ASP.NET のプライベート バイト制限

出力キャッシュを有効にすると、ASP.NET 2.0 における既定のプライベート バイト制限を拡張する必要が生じる場合があります。この制限によって、ASP.NET によって出力キャッシュがフラッシュされるタイミングが決定されます。フラッシュが早すぎると、パフォーマンスの低下を招きます。詳細については、「caching の cache 要素 (ASP.NET 設定スキーマ)」(https://go.microsoft.com/fwlink/?linkid=78934&clcid=0x411) を参照してください。

キャッシュされたページ バージョン

特定の Web ページでは、ユーザーやその他のビジネス ロジックに基づいて、わずかに異なるバージョンが表示される場合があります。アイテムを個別にキャッシュする必要がある場合は、サポートされているプログラム可能な API を使用して出力キャッシュを拡張することで、これに対応できます。詳細については、「[方法] VaryByCustom イベント ハンドラを使用してキャッシュを拡張する」(https://go.microsoft.com/fwlink/?linkid=78935&clcid=0x411) を参照してください。

出力キャッシュとコンテンツ クエリ Web パーツの RSS フィード

コンテンツ クエリ Web パーツでは、Web パーツに表示された結果の RSS フィードを提供できます。この RSS フィードはサーバー上の .aspx ページによって生成されます。コンテンツ クエリ Web パーツに表示されたものと同じ結果に基づく RSS フィード XML が生成されます。

多くの場合、RSS クライアントは一定の間隔 (30 分ごとなど) で RSS フィードをサーバーに要求するので、RSS フィードの生成が適切に行われることが重要です。そのため、RSS フィードの .aspx ページでは出力キャッシュを実装します。.aspx ファイルのソースには次の行が含まれます。

<%@ OutputCache Duration="300" VaryByParam="xsl;web;page;wp" VaryByCustom="rights;feedresults"%>

これにより、既定では、コンテンツ クエリ RSS フィードは 5 分間 (300 秒間) キャッシュされ、コンテンツ クエリ Web パーツごとに、個別のバージョンの RSS フィードがキャッシュされます。さらに、権限とフィード結果が異なるユーザーごとに、個別のバージョンの RSS フィードがキャッシュされます。

この出力キャッシュをカスタマイズするには、実装するロジックは同じで出力キャッシュの設定が異なる独自のフィード .aspx ページを作成します。その後で、コンテンツ クエリ Web パーツで既定のフィード .aspx ページの代わりにカスタム フィード .aspx ページを参照できます。

さらに、検索センター サイトに、ほかにも同様のセキュリティの問題に注意する必要のあるページが存在する場合は、検索センター サイト全体で出力キャッシュを無効にできます。検索センター サイトの出力キャッシュを無効にするには、次の手順を実行します。

検索センター サイトの出力キャッシュを無効にする

  1. サイト コレクションのトップレベル サイトで、[サイトの操作] メニューの [サイトの設定] をポイントし、[すべてのサイト設定の変更] をクリックします。

  2. [サイトの設定] ページの [サイト コレクションの管理] セクションで、[サイト コレクション出力キャッシュ] をクリックします。

  3. [サイト コレクションの出力キャッシュの設定] ページの [ページ出力キャッシュ ポリシー] セクションで、[発行サイトで、別のページ出力キャッシュ プロファイルを使用できるようにする] チェック ボックスをオンにし、[OK] をクリックします。

  4. トップ ナビゲーション バーの [検索] タブをクリックします。

  5. 検索センターのホーム ページで、[サイトの操作] メニューの [サイトの設定] をポイントし、[すべてのサイト設定の変更] をクリックします。

  6. 検索センター サイトの [サイトの設定] ページで、[サイトの管理] セクションの [サイト出力キャッシュ] をクリックします。

  7. [発行サイトの出力キャッシュの設定] ページの [認証キャッシュ プロファイル] セクションで、[プロファイル "無効" を継承します。] をクリックします。

  8. 必要に応じて、[これらの設定をすべてのサブサイトに適用する] チェック ボックスをオンにし、すべてのサブサイトの認証出力キャッシュを無効にすることもできます。

オブジェクト キャッシュ

Office SharePoint Server 2007 では、ナビゲーション データ、クロス リスト クエリによってアクセスされるデータなど、特定のページ アイテムをキャッシュすることがサポートされます。ページ アイテムをキャッシュすることで、ページを表示するたびにデータベースからフィールド データを取得する必要性が減ります。さらに、このキャッシュ システムでは、ページ上の Web パーツ コントロールのデータ以外の、ページ上のフィールド データを完全にキャッシュすることができます。

オブジェクト キャッシュの調整

オブジェクト キャッシュのサイズは、既定ではサイト コレクションあたり 100 MB に設定されていますが、各サイト コレクションの設定値は Web サイトの特性に合わせて変更できます。オブジェクト キャッシュのサイズを調整するには、1 組のパフォーマンス カウンタを使用します。このパフォーマンス カウンタ オブジェクトの名前は SharePoint Publishing Cache Object です。キャッシュ ヒット率やオブジェクト破棄カウンタの変化に基づき、オブジェクト キャッシュのサイズを適宜設定できます。サイズの限度を設定する際には、次の点を考慮してください。

  • 最初は小さな値 (たとえば 200 MB) に設定し、キャッシュ ヒット率とオブジェクト破棄カウンタを監視します。キャッシュ ヒット率が 90% を超えており、オブジェクト破棄率が低い場合は、現在のサイズで十分であることがわかります。ただし、主要な操作のユーザー応答時間も計測して、設定を調整してください。

  • サイズを大きくしすぎると、ASP.NET 出力キャッシュなどの他のキャッシュ (使用している場合) で貴重なメモリを浪費する結果になる可能性があります。コンテンツ クエリ Web パーツなどの一部の Web パーツでは、出力キャッシュにその XSLT スタイルシートが格納されます。オブジェクト キャッシュの設定サイズが大きすぎる場合、スタイル シートを格納できるように、ASP.NET により出力キャッシュ メモリがフラッシュされることがあります。フラッシュの後、CPU 使用率が増加することもあります。32 ビット オペレーティング システムで実行されているシステムの場合、各ワーカー プロセスが使用できるアプリケーション メモリ領域は 2 GB に制限されるため、この問題が特に重要となります。オブジェクト キャッシュの上限サイズが大きすぎると、IIS のワーカー プロセス (w3wp) によってメモリが使い果たされる可能性があります。

クロス リスト クエリのキャッシュ

オブジェクト キャッシュを使用して、クロス リスト クエリで取得されたアイテムもキャッシュできます。クロス リスト クエリでは、サイト コレクション内のさまざまなリストやサイトからアイテムを収集します。クロス リスト クエリが最も一般的に使用されるのは、コンテンツ クエリ Web パーツです。クロス リスト クエリを使用する場合は、毎回データベース サーバーへのラウンド トリップを行う必要があります。オブジェクト キャッシュを使用することで、クロス リスト クエリの実行に必要なラウンド トリップの回数を大幅に減らすことができ、クロス リスト クエリの結果を表示するコンテンツ クエリ Web パーツなどの機能のパフォーマンスが改善されます。

更新の確認

次の 2 とおりの方法で、更新を確認し、必要に応じてキャッシュを更新するようにクロス リスト クエリ キャッシュを構成できます。

  • サイト コレクションで加えられた変更を確認する。変更が加えられていなければ、キャッシュされている結果が使用される。

  • 一定時間待機し、その間はキャッシュされている結果が使用される。その後でクエリが発行され、キャッシュが更新される。

最初の設定は、クロス リスト クエリによって表示されるサイト コレクションのコンテンツが頻繁に変更され、クエリに最新情報が反映されることが重要である場合に有効です。その例として、部門別のイントラネット ポータル サイトでサイト内の最新ドキュメントのクロス リスト クエリを表示する場合が挙げられます。このようなサイトでは、多くのユーザーが投稿者なので、ユーザーが発行した最新ドキュメントを表示することが重要になります。

2 番目の設定は、サイト コレクションのコンテンツが頻繁に変更されず、クロス リスト クエリで最新情報を表示することがそれほど重要ではない場合に有効です。その例として、公開インターネット サイトでサイト内で発行された最新記事のページのクロス リスト クエリを表示する場合が挙げられます。このようなサイトでは、ほとんどのユーザーが匿名ユーザーであるか、読み取り専用の権限を持つ認証済みユーザーです。この場合は、最新記事の反映が数分遅れても問題になりません。

以下の手順を実行して、クロス リスト クエリのキャッシュを構成できます。

クロス リスト クエリのキャッシュを設定する

  1. サイトのホーム ページで、[サイトの操作] メニューの [サイトの設定] をポイントし、[すべてのサイト設定の変更] をクリックします。

  2. [サイトの設定] ページの [サイト コレクションの管理] セクションで、[サイト コレクションのオブジェクト キャッシュ] をクリックします。

  3. [クロス リスト クエリのキャッシュの変更] セクションで、クロス リスト クエリのキャッシュの更新方法に応じて、適切なオプション ボタンを選択します。[キャッシュされたクロス リスト クエリの結果を一定時間使用する] を選択する場合、キャッシュを更新するまで待機する秒数を表す数値をテキスト ボックスに入力する必要があります。

  4. [OK] をクリックして変更を保存します。

取得するアイテムの数

[クロス リスト クエリの結果の乗数] の設定により、取得されてキャッシュされるアイテムの数が決まります。クロス リスト クエリでは、保持する権限の異なる幅広いユーザーに合わせてアイテムを取得できるので、すべてのユーザーに対して適切なアイテムが表示されるように、クエリで十分な数のアイテムを取得することが重要です。セキュリティによるトリミング後に、検索結果として適切なアイテムがユーザー全員に表示されるようにするには、クロス リスト クエリ キャッシュで元の要求よりも多くの結果を取得する必要があります。この設定では、クロス リスト クエリ キャッシュで取得するアイテム数の乗数を表す整数を指定します。

  • 設定する乗数の値を大きくするほど取得されるアイテムの数は増えますが、メモリの消費量も増加します。多数のユーザーがさまざまなリストやアイテムに対する独自の権限を保持している Web サイトの場合は、値を大きくすることをお勧めします。

  • 設定する乗数の値を小さくするほど取得されるアイテムの数が減り、メモリの消費量も減少します。匿名ユーザーが利用するインターネット サイトのように、ユーザーに対するセキュリティ設定がすべて同じである Web サイトの場合は、値を小さくすることをお勧めします。

クロス リスト クエリの結果の乗数を設定する

  1. サイトのホーム ページで、[サイトの操作] メニューの [サイトの設定] をポイントし、[すべてのサイト設定の変更] をクリックします。

  2. [サイトの設定] ページの [サイト コレクションの管理] セクションで、[サイト コレクションのオブジェクト キャッシュ] をクリックします。

  3. [クロス リスト クエリの乗数] ボックスに、クロス リスト クエリで取得するアイテムの乗数を指定する数値を入力します。

  4. [OK] をクリックして変更を保存します。

BLOB のディスク ベース キャッシュ

ディスク ベース キャッシュでは、画像ファイル、サウンド ファイル、動画ファイル、コード フラグメントなど、バイナリ ラージ オブジェクト (BLOB) のキャッシュが制御されます。ディスク ベース キャッシュを使用すると、BLOB にアクセスするためにデータベース ラウンド トリップを実行する必要性が減少します。BLOB はデータベースから 1 度取得された後、Web サーバーに格納されます。それ以降の要求に対しては、データはディスク ベース キャッシュから取得され、要求はセキュリティに基づいてトリミングされます。

考慮事項

  • ディスク ベース キャッシュのサイズは、Web アプリケーションごとに設定できます。サイズの最小値は 1 GB で、その倍数単位で大きくすることができます。アプリケーション用のディスク領域が十分にあることを確認してください。

  • ディスク ベース キャッシュについては、多くの設定を行うことができます。特に、次の 2 つの設定に注意してください。

    • max-age を使用して、クライアント コンピュータにダウンロードされた BLOB をクライアント ブラウザでキャッシュする最長時間 (秒数) を指定します。前回ダウンロードされたアイテムの期限が切れていない場合は、キャッシュが期限切れになるまで、同じアイテムが再度要求されることはありません。max-age 属性は、既定では 86,400 秒 (24 時間) に設定されていますが、0 秒以上の時間を設定することができます。この値を大きくするほど、ブラウザが更新されたアイテムを取得するまでの時間が長くなります。

    • 正規表現の形式のパスを使用して、キャッシュするファイルをファイル拡張子に基づいて指定します。既定のファイル拡張子には、gif、jpg、png、css、js などがあります。Web ページによって参照される特殊なファイルがある場合は、その拡張子をキャッシュに追加する必要があります。

  • ディスク ベース キャッシュは、ドキュメント ライブラリ内のアイテムにのみ適用されます。サイトの下位のフォルダなど、ドキュメント ライブラリの外部にリソースを格納している場合、Web アプリケーション全体でディスク ベース キャッシュを有効にしても、そのアイテムはディスク ベース キャッシュの管理対象にはなりません。クライアント ブラウザにダウンロードされた BLOB リソースの max-age 設定を調整する場合、この点に注意する必要があります。既定では、Office SharePoint Server に格納されるすべてのアイテムの max-age は 0 に設定されています。