NHibernate SQL查询越来越慢

时间:2014-06-06 10:14:05

标签: sql nhibernate fluent-nhibernate query-performance



我正在构建需要处理来自数据库的所有产品数据的系统(现在使用200k产品进行测试+数据分布在多个表中)。

我使用NHibernate来完成所有查询。
我创建了一个自定义查询,可以一次性获取ProductIds列表的所有相关数据(试图找到最有效查询数据的最佳切割)。

现在我开始意识到它在一些查询中需要花费5分钟才能完成,最好的情况下需要2秒钟。 (记住它对于相同数量的产品ID完全相同的查询)。这是一个测试运行,我在每个循环中获取200个完整的产品。日志显示(在我看来)相当随机的查询时间:

  

从数据库中抓取200件产品:00:00:01.9370364   秒。从数据库中抓取200个产品:   00:01:06.8207146秒。
从数据库中抓取200个产品   花了:00:00:58.5194938秒。从中获取了200个产品   数据库拍摄时间:00:00:03.5447583秒。
抓取200个产品   从数据库中取出:00:02:01.6096919秒。
抓住200   数据库中的产品采用:00:00:03.2856333秒   从数据库中获取200个产品:00:02:04.8108302   秒。从数据库中抓取200个产品:   00:00:03.4525576秒。
从数据库中抓取200个产品   拍摄时间:00:01:04.4530670秒。

以上只是一个剪切,所以请不要试图找到一个模式,因为它是随机的。有时它会连续运行10个查询并且查询时间可以接受,有时它只会每隔一秒查询一次。最终会超时。

这似乎是数据库中的查询时间 - 我还附加了一个显示相同长查询时间的sql profiler。

我在运行代码时没有做任何其他事情。我已将隔离级别设置为ReadCommitted - 将其设置得更低并不会影响查询时间。

我想问题是:为了改变性能,我应该寻找哪些东西?我使用的是sql server enterprise 2012 64位版本。

我不是改变查询或数据库架构的忠实粉丝,因为它似乎并不相关?

欢迎任何建议。

祝你好运

的Morten

1 个答案:

答案 0 :(得分:0)

为什么不在一段时间内调用ISession.Clear?它将从第一级缓存中删除所有条目,这可能是您不需要的。或者更好的是,使用IStatelessSession而不是常规的ISession。