【问题标题】:NHibernate SQL query are getting slowerNHibernate SQL 查询越来越慢
【发布时间】:2014-06-06 10:14:04
【问题描述】:



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

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

现在,我正在努力解决某些查询需要长达 5 分钟才能完成的事实,在最好的情况下需要 2 秒。 (请记住,对于相同数量的产品 ID,这是完全相同的查询)。这是一个测试运行,我在每个循环中获取 200 个完整的产品。日志显示(在我看来)相当随机的查询时间:

从数据库中抓取 200 件产品耗时:00:00:01.9370364 秒。
从数据库中获取 200 个产品需要: 00:01:06.8207146 秒。
从数据库中抓取 200 个产品 耗时:00:00:58.5194938 秒。
从 数据库耗时: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 分析器。

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

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

我不太喜欢更改查询或数据库架构,因为它似乎不相关?

欢迎提出任何建议。

最好的问候

莫顿

【问题讨论】:

  • 你说你在 SQL profiler 上有相同的结果(顺便说一句,它没有附加),这意味着它是数据库,它怎么可能是 Nhibernate?我绝对会安装 NHProfiler,因为它可以向您显示大量信息(统计数据),这将有所帮助。
  • 附加是一个糟糕的表达:) 好吧,这只是一个可能有用的信息。我已经考虑过了。不确定它会提供多少。只需一次调用即可执行查询。不过我会尝试一下。这是一个很棒的工具!我关心的事情:是由于锁定吗?还是仅仅是数据库资源不足?
  • 您是否检查过缺失的索引、错误的查询计划或过时的统计信息?参见例如stackoverflow.com/a/15549211/1236044

标签: sql nhibernate fluent-nhibernate query-performance


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2022-01-12
    • 1970-01-01
    • 2012-07-25
    • 2016-03-05
    • 1970-01-01
    • 2020-01-23
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多