【问题标题】:NHibernate Profiler - large discrepancy between database duration and total duration?NHibernate Profiler - 数据库持续时间和总持续时间之间的巨大差异?
【发布时间】:2011-01-07 16:40:29
【问题描述】:

我有一个广泛使用 NHibernate 的应用程序。我已经开始使用 NHibernate Profiler 来识别可能的性能问题。我的问题与查询持续时间统计有关。

统计数据在数据库持续时间和总持续时间中细分。根据我的阅读,数字应该非常接近。但是,我看到了相对较大的差异,我正试图找出这些差异的来源。这是一些数据

知道我可以从哪里着手解决这些问题吗?

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhprof


    【解决方案1】:

    您的应用程序是否使用 log4net?如果是这样,您应该检查您的 log4net 配置并减少您从 NHibernate 记录的数据量。

    我现在正在处理的项目中的一个示例:对于返回 60 行/对象的查询,将 DEBUG 级别的所有 NHibernate 日志消息记录到文件中,将 NHibernate 报告的总持续时间从 8 毫秒增加到大约 8000 毫秒!

    限制 NHibernate 输出的示例配置:

    <root>
        <level value="ALL" />
        <appender-ref ref="console" />
        <appender-ref ref="trace" />
    </root>
    
    <logger name="NHibernate">
        <level value="WARN" />
    </logger>
    

    如果这不能解决您的问题,也许您可​​以使用 dotTrace 或 ANTS Profiler 等性能分析工具来识别代码中的潜在瓶颈。这将让您清楚地了解您/NHibernate 代码中的哪些方法需要花费大量时间。

    【讨论】:

    • 谢谢!这也是我的问题。我注意到与之前的 NH 2.1 相比,NH 3.1 花费了相当长的时间。你为我节省了数小时的分析时间。 :)
    • 同样适用于实体框架,DatabaseContext.Database.Log=... 显着减慢一切
    【解决方案2】:

    您好,我认为您没有找对地方。您不应该查看数据库持续时间等。一旦执行到 dB lvl,您将无法做太多事情。

    相反,您应该关注的是您向数据库发送了多少查询。您能否通过避免冗余调用或缓存某些查询以某种方式最小化它们。您是仅检索与您相关的属性,还是将整个对象加载到内存中然后对其进行处理。

    另外,您正在开发什么平台,我也许可以为您推荐更好的工具来识别您的应用程序中的瓶颈。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      我不知道事实,但我一直认为总持续时间会增加构建 SQL 查询以及在数据检索时使用原始数据构建实体的所有 NHibernate 开销。

      也许您的实体的构建过程非常缓慢?您的实体构造函数中是否有一些广泛的处理?任何 IO 操作、日志记录、额外的数据库访问、网络使用...

      祝你好运

      【讨论】:

        【解决方案4】:

        第一个结果是执行和从数据库中检索结果所花费的时间。 第二个结果是 NHibernate 将相应实体加载到内存中所花费的时间。

        我现在在一个项目中工作,该项目利用了一个非常大的实体(几乎 100 列/字段)。如果我尝试加载几千个,也需要几秒钟。 但是,sql-query 将在几毫秒内返回实体 ID 列表。但是要将这些 id 实际加载到相应的实体中,如果您的实体是大型或复杂对象(请参阅上面的帖子),则会产生额外的开销。

        对于生成的查询,您是否收到任何警报? NHibernate Profiler 中 Duration 旁边的列。

        最好的问候,
        马蒂亚斯

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多