我目前正在调查ASP.NET MVC Web应用程序,据报道该应用程序在负载下性能较差。 (但加载只是每秒几个请求)。
我们使用MySQL + NHibernate + Castle ActiveRecord进行映射。 NHibernate会话在每个会话开始时打开,并在视图中保持打开状态。
我已经优化了数据访问模式,以避免在可能的情况下选择N + 1问题。
现在我正在考虑的是..在每个请求上打开一个数据库事务并在最后提交。在99%的请求(MVC操作)中,不必将数据写入数据库。
答案 0 :(得分:6)
您应该验证您的应用程序没有从DB加载大量数据。即使所有选择n + 1已解决,您也可以加载数百万条记录,而且速度非常慢。
使用NHibernate profiler验证您的网页。它会提出优化建议。如果没有,可能NH不是你的瓶颈。
答案 1 :(得分:0)
如果您每秒只有少量请求,则打开事务的开销不是性能不佳的原因。尝试让NHibernate记录发送到服务器的所有SQL。这可以让你知道为什么我慢的东西。可能它会为每个HTTP请求发送十亿个查询,否则表上一些精心选择的索引可能对您有所帮助。