Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 99%只读NHibernate web应用程序的性能不佳_Performance_Nhibernate_Castle Activerecord - Fatal编程技术网

Performance 99%只读NHibernate web应用程序的性能不佳

Performance 99%只读NHibernate web应用程序的性能不佳,performance,nhibernate,castle-activerecord,Performance,Nhibernate,Castle Activerecord,我目前正在调查一个ASP.NET MVC web应用程序,据报告该应用程序在负载下性能较差。(但加载速度仅为每秒几个请求) 我们使用MySQL+NHibernate+CastleActiveRecord进行映射。NHibernate会话在每次会话开始时打开,并在视图中保持打开状态 我已经优化了数据访问模式,以尽可能避免选择N+1问题 现在我想的是。。每个请求都会打开一个数据库事务,并在最后提交。在99%的请求(MVC操作)中,无需将数据写入数据库 您是否认为提前关闭会话/事务或甚至将会话标记为只

我目前正在调查一个ASP.NET MVC web应用程序,据报告该应用程序在负载下性能较差。(但加载速度仅为每秒几个请求)

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

我已经优化了数据访问模式,以尽可能避免选择N+1问题

现在我想的是。。每个请求都会打开一个数据库事务,并在最后提交。在99%的请求(MVC操作)中,无需将数据写入数据库

  • 您是否认为提前关闭会话/事务或甚至将会话标记为只读会带来好处
  • 数据库锁定可能是一个瓶颈吗?如果是,至少对于只读事务,是否可以显式避免锁定

  • 如果每秒只有很少的请求,那么打开事务的开销并不是性能差的原因。尝试让NHibernate记录发送到服务器的所有SQL。这可以让你知道为什么我会放慢速度。它可能会为每个HTTP请求发送十亿个查询,或者在表上选择一些好的索引可能会对您有所帮助。

    您应该验证您的应用程序没有从数据库加载大量数据。即使解决了所有select n+1,您也可以加载数百万条记录,这将非常缓慢


    使用验证您的页面。它将提出优化建议。如果不是,NH可能不是你的瓶颈

    请检查是否有可能为每个会话创建sessionfactory。创建sessionfactory非常昂贵,应该在应用程序启动或第一次请求时完成。之后,它可以用于任意数量的会话。如果没有分析数据,提供的任何答案都将是猜测。同意。给NHibernate探查器打一针。你会对它发现的东西感到惊讶好吧,我们已经在测试系统中使用了NHibernate profiler(它向我们指出了N+1问题)。也许它显示了实时系统中的其他结果。我已经用NHibernate探查器检查过了。我们每个会话最多有25个请求(这不太好,但不应该占用5秒钟)。如果您在事务中没有看到任何优化潜力,我必须检查其他可能性。25个请求的开销可以忽略不计,因此您应该花时间找出请求本身花费如此长时间的原因。取下每一个并在数据库上运行,其中哪一个需要花费太多的时间。