问题标签 [nhprof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - NHibernate、ActiveRecord、事务数据库锁以及何时刷新提交
这是一个常见的问题,但到目前为止发现的解释和观察到的行为有一定的差距。
我们希望在我们的 MVC 网站中使用以下 nHibernate 策略:
- A
SessionScope
用于请求(跟踪更改) - 仅包装我们的
ActiveRecord.TransactonScope
插入(以启用批处理的回滚/提交) - 选择在事务之外(以减少锁定范围)
- 插入的延迟刷新(以便我们的插入/更新在会话结束时作为 UoW 发生)
现在我们:
- 不要从
SessionScope
(使用 FlushAction Auto 或 Never)获取隐含事务 - 如果我们使用
ActiveRecord.TransactionScope
,则不会延迟刷新,并且任何包含的选择也会陷入长时间运行的事务中。
我想知道是不是因为我们有一个旧版本的 nHibernate(它来自非常接近 2.0 的主干)。
我们只是无法获得预期的 nHibernate 行为,而且性能很差(使用 NHProf 和 SqlProfiler 来监控数据库锁)。
nhibernate - NHibernate Linq 使用隐式事务?
我正在使用 Ayende 的 NHibernate Linq 版本 2.1.2,可在此处获得,并且当我使用 NHProf 检查使用此方法的查询时:
它给了我一个警告,我正在使用隐式事务。问题是,我在存储库中使用它来抽象出数据库会话,但我仍然想要返回 IQueryable 的灵活性,这样我就可以运行我想要的任何 Linq 查询。有没有办法Session.Linq<T>()
在不暴露的情况下显式地将其包装在事务中,或者在这种情况下我应该忽略警告吗?
多一点背景。我正在使用这样的方法:
java - 为 Hibernate 设置 HProf
如何为 Hibernate 设置NhProf?
nhibernate - NHibernate 需要很长时间才能运行查询
这是使用 Fluent NHibernate 完成的
我有一个 NHibernate 查找,它正在从一个表中检索数据。如果我使用生成的 sql 并通过查询分析器运行它,则运行大约需要 18 毫秒。
使用 NHProfiler,我得到这个查询的持续时间为 ~1800 毫秒 - 比 sql 长 100 倍!
正在填充的对象包含一个子类,但是这个子类是从 NHibernate 二级缓存加载的
返回的数据是分页的(每个查询 50 个),但据我所知,这应该没有任何区别
我还运行了一个计数,根据 NHProfiler,这在查询分析器中需要约 4 毫秒,而根据 NHProfiler,这需要约 1800 毫秒。
NH Profiler 是显示查询执行时间,还是检索、映射类和构建对象图的完整时间?如果是前者 - 为什么它比直接运行查询要花这么长时间?
编辑:刚刚发现 Ayende 关于 NH Profiler 中给出的查询持续时间值的帖子:http: //ayende.com/Blog/archive/2009/06/28/nh-prof-query-duration.aspx - 所以肯定是查询耗时较长的数据库
nhibernate - 在 Nhibernate 中加载与获取
我的 Web 应用程序中的母版页进行身份验证并使用Get
.
在此之后,每当用户控件或任何其他类需要用户对象时,我都会执行Load
.
通常nhibernate 应该从缓存中加载对象或在调用时返回持久加载的对象Load
。但这不是我的 Web 应用程序显示的行为。NHprof总是在调用 Load 时显示 sql。如何验证 的正确行为Load
?
我使用S#arp 架构框架。
nhibernate - 使用 NServiceBus 时,NHProf 中的“在多个线程中使用单个会话可能是一个错误”错误
在执行使用 NHibernate 进行数据访问操作的 NServiceBus 处理程序时,我看到一个错误,我不确定是否需要关注。
处理程序具有执行以下操作的代码:
当我分析这个过程时,我看到以下几行:
- 在具有隔离级别的分布式事务中登记会话:可序列化
- 以隔离级别开始事务:未指定
- SELECT ... FROM AccountGroups this_ WHERE this_.ID = 123
- 插入帐户...
- 提交事务
- 提交事务
当我调用 tx.Commit() 时,我的代码会生成第一条提交消息。第二个提交消息,我相信当我们离开处理程序的 Handle 方法并由 NServiceBus 调用时发生。第二次提交调用会在 NProf 中生成一个警报,指出“在多个线程中使用单个会话可能是一个错误”。
我不认为这是一个问题,因为当时确实没有什么可以提交的,但是我在这里做了一些不合适的事情吗?我确实想在事务中运行我的代码,但是当我这样做时,我会收到此警报。
有任何想法吗?
nhibernate - 计算 NHibernate 在单元测试中执行的查询数
在代码的一些单元/集成测试中,我们希望检查我们的代码是否正确使用了二级缓存。
根据 Ayende 在这里提供的代码:
http://ayende.com/Blog/archive/2006/09/07/MeasuringNHibernatesQueriesPerPage.aspx
我为此编写了一个简单的类:
预期用途:
但它总是为查询计数返回 0。没有记录任何 sql 语句。
但是,如果我使用 Nhibernate Profiler 并在我的测试用例中调用它:
NHProf 使用类似的方法从 NHibernate 捕获日志输出以通过 log4net 等进行分析,然后我的 QueryCounter 开始工作。
看起来我在我的代码中遗漏了一些东西来正确配置 log4net 以记录 nhibernate sql ... 有没有人知道我还需要做什么才能从 Nhibernate 获取 sql 日志记录输出?
附加信息:
日志记录配置:
show_sql: 真
基于 jfneis 的响应,我编写了一个简单得多的类,它只使用 NHibernate 的工厂统计信息:
一旦启用统计信息,它就可以正常工作。
nhibernate - 使用 NHibernate 提交事务后的故障安全清理(集合)警告
在查看 NHProfiler 时,我在提交交易后收到以下警告:
故障安全清理(集合):NHibernate.Engine.Loading.CollectionLoadContext
我完全不知道这可能是什么或如何解决这个问题。有人可以帮助我吗?
谢谢,耶勒
nhibernate - 在使用 NHProf 进行分析运行之间清除 NHibernate 缓存
我们正在尝试使用 NHProf 来分析我们的 NHibernate 应用程序。我们有一系列单元测试来执行各种调用。但是,如果我们多次运行单元测试,我们会在 NHProf 中得到不同的结果:
- 第 1 节 [1]
- 会议 2 [32]
- 第三节 [32]
- 第 4 节 [2]
- 第 5 节 [2]
我尝试在单元测试结束时调用 session.Clear(),并尝试重建解决方案。但基本上我们想要调整和调整查询,如果 NHibernate 在运行之间进行缓存,则不能这样做。当然,其他人以前也遇到过这种情况,我们只是很密集,但我很感激你能提供的任何帮助。
更新好吧,如果这是预期的行为,如何测试查询优化?
asp.net - 当我将 ViewModel 对象传递给我的 ASP.NET MVC 视图页面时,NHProf 生成“从视图执行的此语句”警告
我刚刚注意到,在我的网站的一个页面上,我将一个 ViewModel 传递给我的视图页面,NHProf 给出了以下警告:
此语句从视图中执行,这可能导致性能不佳和/或行为脆弱。
然后链接到此页面: http: //nhprof.com/Learn/Alerts/QueriesFromViews
我的 ViewModel 仅包含 2 个属性:
我将照片分配给我的控制器中的这个 ViewModel,如下所示:
My View 显然继承了这种类型,并且除了输出一个标题(它使用SelectedPhoto
对象)之外,它只是循环遍历每个Photos
渲染的每个内容。
NHProf 将“问题”查询显示为它检索我在视图中循环浏览的照片集合的位置,尽管我没有明确告诉它关闭并从我的视图中获取这些记录 - 我已经通过Photos
我的 ViewModel 属性中的这些记录。
我有其他页面不需要传递 ViewModel,我只需传递IEnumerable<Photo>
给 View,然后渲染标记与我在问题视图中所做的完全相同,NHProf 没有给出警告(因为不应该有) 在那种情况下。
我在想它可能与延迟加载有关,并且因为我的集合是 ViewModel 的一部分,所以当我遍历Photos
ViewModel 类型中的属性时,它会在那时获取这些记录吗?
有谁知道这里发生了什么?该网站功能完美,但 NHProf 只是看到它正在做一些不应该做的事情?!