現在、負荷のかかっているパフォーマンスが低いと報告されているASP.NET MVC Webアプリケーションを調査中です。 (しかし、負荷はほんの少しのリクエスト/秒です)。99%読み取り専用NHibernate Webアプリケーションのパフォーマンスが悪い
マッピングには、MySQL + NHibernate + Castle ActiveRecordを使用しています。 NHibernateセッションは、すべてのセッションの始めに開かれ、開いたままにします。
可能な場合はN + 1個の問題を選択しないようにデータアクセスパターンを最適化しました。
私が考えているのは、各リクエストでデータベーストランザクションが開かれ、最後にコミットされます。 99%のリクエスト(MVCアクション)では、データをデータベースに書き込む必要はありません。
- セッション/トランザクションを先に閉じるか、セッションを読み取り専用としてマークすることは可能ですか?
- データベースのロックがボトルネックになる可能性がありますか?そうであれば、少なくとも読み取り専用トランザクションのロックを明示的に回避することは可能ですか?
セッションごとにセッションファクトリーを作成するかどうかを確認してください。セッションファクトリーの作成は非常に高価で、アプリケーションの起動時や最初の要求時に一度実行する必要があります。その後、任意の数のセッションに使用できます。 –
データをプロファイリングしないと、提供されるすべての回答は推測になります。 –