SqlCacheDependency クラスによる ASP.NET のキャッシュ
更新 : 2007 年 11 月
ASP.NET では、SqlCacheDependency クラスを使用してデータベースのテーブルまたは行に対してキャッシュ項目の依存関係を作成できます。テーブルまたは特定の行が変更されると、依存関係がある項目は無効になり、キャッシュから削除されます。Microsoft SQL Server 7.0、SQL Server 2000、および SQL Server 2005 のテーブルの依存関係を設定できます。SQL Server 2005 を使用している場合は、特定のレコードの依存関係を設定することもできます。
SQL の依存関係によるキャッシュを使用すると、特定のシナリオでアプリケーションのパフォーマンスが格段に向上します。たとえば、データベースから製品情報を表示する e コマース アプリケーションを構築するとします。キャッシュを使用しなければ、アプリケーションはユーザーが製品を表示するたびにデータベースからデータを取得する必要があります。製品情報を一度にキャッシュすると、製品情報が既にメモリにあるため、応答時間を短縮できます。ただし、製品情報が変更されると、キャッシュされた製品情報は最新データと同期されなくなります。
SQL キャッシュの依存関係を使用すると、製品情報をキャッシュしてデータベースのテーブルまたは行の変更に対する依存関係を作成できます。データが変更された場合のみ、データに依存するキャッシュ項目が無効になり、キャッシュから削除されます。次回要求した項目がキャッシュにない場合は、更新されたバージョンをキャッシュに再び追加して最新のデータを使用できるようにします。
SQL キャッシュの依存関係はページ出力キャッシュにも使用できます。たとえば、特定の製品に関する情報を表示する ViewProduct.aspx というページを作成するとします。このページのキャッシュ ポリシーは、手動でキャッシュに追加する項目と同様の方法で SQL の依存関係に設定できます。これによって、ページは依存関係にあるテーブルまたは行が変更されるまでキャッシュに格納されます。データが変更されると、ページが再び作成されて出力キャッシュに格納されます。
詳細については、「ASP.NET のキャッシュの概要」を参照してください。
機能
ASP.NET の SQL キャッシュの依存関係は、次の機能を提供します。
SQL キャッシュの依存関係は、アプリケーション キャッシュとページ出力キャッシュの両方に使用できます。
SQL キャッシュの依存関係は、SQL Server 7.0 またはそれ以降のバージョンで使用できます。
SQL キャッシュの依存関係は Web ガーデン (1 つのサーバーに複数のプロセッサ) や Web ファーム (同じアプリケーションを複数のサーバーで実行する) で使用できます。
SQL キャッシュの依存関係に関連するデータベース操作は単純なため、サーバーに大きな負荷はかかりません。
アプリケーションと SQL Server における SQL キャッシュの依存関係の構成に SQL の専門知識は必要ありません。ASP.NET には、構成を自動化するツールがあります。さらに、SqlCacheDependencyAdmin クラスを使用して、SQL キャッシュの依存関係をプログラムによって構成することもできます。
SQL Server 7.0 と SQL Server 2000 における実装
ASP.NET は、SQL Server 7.0 と SQL Server 2000 キャッシュの依存関係のポーリング モデルを実装します。ASP.NET プロセス内のスレッドは、指定された間隔で SQL Server データベースをポーリングしてデータが変更されているかどうかを判定します。変更されている場合、依存するキャッシュ項目は無効になり、キャッシュから削除されます。ポーリング間隔は、アプリケーションの Web.config ファイルで宣言して指定するか、プログラムで SqlCacheDependency クラスを使用して指定できます。
SQL Server 7.0 と SQL Server 2000 の場合、SQL キャッシュの依存関係はテーブル レベルでのデータ変更に対してのみ設定できます。特定の行ではなく、テーブル内の変更についてデータベースをポーリングするように ASP.NET を構成できます。
SQL キャッシュの有効化
SQL Server 7.0 と SQL Server 2000 で SQL キャッシュの依存関係を使用するには、この機能をサポートするように SQL Server を構成する必要があります。ASP.NET は、SQL Server で SQL キャッシュを構成するためのユーティリティを提供し、これには Aspnet_regsql.exe というツールと SqlCacheDependencyAdmin クラスが含まれます。SQL Server で SQL キャッシュの依存関係を有効にする方法の詳細については、「方法 : キャッシュ キーの依存関係によってページ出力をキャッシュする」を参照してください。
SQL Server 2005 における実装
SQL Server 2005 には、SQL Server 7.0 および SQL Server 2000 とは異なるキャッシュの依存関係のモデルが実装されています。SQL Server 2005 では、SQL キャッシュの依存関係を有効化するための特別な構成手順は必要ありません。また、SQL Server 2005 には、旧バージョンの SQL Server では必要とされたポーリング モデルに依存するのではなく、サブスクライブしているアプリケーション サーバーに通知が送信される変更通知モデルも実装されています。
SQL Server 2005 キャッシュの依存関係では、通知を受け取る変更の種類をより柔軟に設定できます。SQL Server 2005 は、特定の SQL コマンドの結果セットに対する変更を監視します。コマンドの結果セットを変更するような操作がデータベースで発生すると、依存関係はキャッシュされた項目を無効にします。これによって、SQL Server 2005 は行レベルの通知機能を提供できます。
変更があるかどうかをテストするために使用するクエリには、いくつかの要件があります。所有者名を含む完全修飾のテーブル名を提供する必要があります (dbo.authors など)。一般に、SQL 2005 の通知は、ストアド プロシージャと Select クエリをサポートし、複数の入れ子になったクエリをサポートしますが、COUNT(*) などの集計操作はサポートしません。サポートされているクエリ、および SQL Server 2005 における通知のルールの詳細については、SQL Books Online の「クエリ通知の作成 」のトピックを参照してください。
ASP.NET アプリケーションにおける SQL キャッシュの構成
SQL Server 7.0 または SQL Server 2000 にキャッシュの依存関係を構成するか、SQL Server 2005 で適切なコマンドの依存関係を作成すると、他のキャッシュの依存関係と同様にアプリケーションが SQL キャッシュの依存関係を使用するように構成できます。たとえば、Web.config ファイルにキャッシュ プロファイルを作成し、SQL キャッシュの依存関係を使用する各ページでキャッシュ プロファイルを参照できます。SqlCacheDependency クラスを使用して、プログラムで SQL キャッシュの依存関係を有効にすることもできます。詳細については、「方法 : キャッシュ キーの依存関係によってページ出力をキャッシュする」を参照してください。