在99%只读的NHibernate Web应用程序中性能不佳

时间:2012-03-26 07:36:16

标签: performance nhibernate castle-activerecord

我目前正在调查ASP.NET MVC Web应用程序,据报道该应用程序在负载下性能较差。 (但加载只是每秒几个请求)。

我们使用MySQL + NHibernate + Castle ActiveRecord进行映射。 NHibernate会话在每个会话开始时打开,并在视图中保持打开状态。

我已经优化了数据访问模式,以避免在可能的情况下选择N + 1问题。

现在我正在考虑的是..在每个请求上打开一个数据库事务并在最后提交。在99%的请求(MVC操作)中,不必将数据写入数据库。

  1. 是否有可能,您是否看到提前结束会话/交易的好处,甚至将会话标记为只读?
  2. 数据库锁定是否会成为瓶颈?如果是这样,是否可以明确避免至少锁定只读事务?

2 个答案:

答案 0 :(得分:6)

您应该验证您的应用程序没有从DB加载大量数据。即使所有选择n + 1已解决,您也可以加载数百万条记录,而且速度非常慢。

使用NHibernate profiler验证您的网页。它会提出优化建议。如果没有,可能NH不是你的瓶颈。

答案 1 :(得分:0)

如果您每秒只有少量请求,则打开事务的开销不是性能不佳的原因。尝试让NHibernate记录发送到服务器的所有SQL。这可以让你知道为什么我慢的东西。可能它会为每个HTTP请求发送十亿个查询,否则表上一些精心选择的索引可能对您有所帮助。