2011-05-18 17 views
1

私はちょうどSysCache2を実装し、私のソリューションのいくつかのエンティティに対してキャッシュを有効にしました。 すべて正常に動作していますが、1つの質問があります。NHibernate Profiler - キャッシュされたエンティティ

時には、特定のページを参照しているときに、NHibernate Profilerは非常に多くのキャッシュされたエンティティがフェッチされていることを示します。数百のキャッシュされたエンティティは、使用されるかなりの量でなければなりませんが、時には3000-5000までカウントされます。下の画像を参照してください。

この場合、キャッシュから実際に5002個のエンティティがフェッチされていますか、またはNHibernate Profilerに誤った印刷がありますか?

読み込み中、すべてが問題なく表示されます。ページ要求は完了しましたが、プロファイラはますますキャッシュされたエンティティをカウントアップし続けます。

誰かが似たような体験をしたことがありますか?これは本当に起こりますか?

NHibernate Profiler Cache

答えて

1

まあ、それは本当にすべてのエントリをフェッチしています。また、スクリーンショットが切り取られていますが、NHProfからキャッシュコールが多すぎるという警告が表示されていると仮定しています。

NHには、クエリキャッシュとエンティティキャッシュの2種類のキャッシュがあります。クエリキャッシュは、クエリから生じたアイテムのアイデンティティ(すなわちデータなし)のみを格納する。次に、NHはエンティティキャッシュから個々にアイテムをIDでフェッチする必要があります。で

さらに詳しい情報:http://ayende.com/blog/3112/nhibernate-and-the-second-level-cache-tips

がこのWebサーバでのパフォーマンスに影響を与える可能性があることに注意してください。私はあなたとまったく同じ状況にあり、これらのエンティティの第2レベルのキャッシュを無効にする方が良い結果を得ました。

また、アペンダーとNHProfの間のレイテンシのためにページがロードされた後でも、新しいエントリを表示し続けます。アペンダーはすべてのログをNHProfに送信し、すべての情報を描画するまでに時間がかかります。

+0

セッションが作成されるたびにプロファイラを初期化するのが問題でした。これで、キャッシュされたエンティティが正しく表示されます。 – Mattias

+0

ちなみにpsousaは、キャッシュを有効にしていない方が良い結果を得ましたか? – Mattias

+0

これはかなり簡単です。私のアプリケーションサーバーは、あまりRAMやCPUがない非常に基本的な仮想マシンでした。データベースサーバは、優れた仕様を持つ非常に有能な物理マシンでした。私のロードテスト中、および情報を取り込んで書き込む何人かのユーザーがいると、キャッシュから何千ものアイテムをロードした画面があるため、CPUはキャッシュを有効にして100%に達しました。上で述べたように、NHProf自体はキャッシュからあまりにも多くのアイテムを読み込まないように警告します。私はDotTraceを使って実行をプロファイリングしました。実際には、第2レベルのキャッシュからフェッチや書き込みに時間を費やしています。 – psousa

関連する問題