「スタースキーマ」で編成されたデータに対して複雑なクエリを実行するアプリケーションがあります。金の所有者は、検索を実行するための新しい「軸」を追加し続けるため、時間の経過とともにパフォーマンスが低下します。現在、ストアド プロシージャを使用して SQL サーバー上ですべての作業を行う検索操作の実行には約 2 秒かかります。 )。SQL Server クエリ アナライザーを見ると、検索は 100,000 レコードの 9 回のテーブル スキャンで IO バインドされており、その後、残忍な結合が行われています。実行する必要があるクエリの性質と SQL の制限により、これを改善することはできません。
必死になって、クエリ プロセッサを書き直して、アプリケーションの起動時に 100,000 レコードをキャッシュに取り込み、キャッシュされたメモリに対して複雑なクエリを実行するようにしました。データベースからすべてのレコードをロードするには、約 12 秒かかります。この高価な初期負荷は、書き直したクエリ プロセッサによって軽減されます。これで、レコードを 1 回スキャンするだけで済み、応答時間は 0.02 秒になります。
この良いニュースは、キャッシュを作成するための 12 秒のヒットが約 1 時間ごとに発生しているという金の所有者の発見によって損なわれています。現在、ASP.NET アプリケーションの状態でデータをApplication["FactTable"]
. ASP.NET アプリケーションが十数分以上アイドル状態になった後、アプリケーションの状態がリセットされているようです。
100,000 レコードを ASP.NET アプリケーション キャッシュに移動した場合、これらのエビクションは同じ頻度で発生しますか? それとも、メモリに残っているデータを信頼して、より長い時間高速に取得できますか? ASP.NET キャッシュもアプリケーションのリセットの犠牲になっている場合、他にどのメカニズムを使用すればよいですか? データベース キャッシュのインスタンスをホストする別のアプリ ドメインが頭に浮かびますが、他のオプションが閉じられない限り、そのルートをたどりたくありません。