当前位置: 首页 > 面试题库 >

通常的休眠性能陷阱

郁权
2023-03-14
问题内容

我们刚刚完成了对我们的应用程序的分析。(她开始慢了)。问题似乎是“处于hibernate状态”。

这是旧版映射。谁在工作,那是工作。后面的关系Shema也可以。

但是有些请求实在太慢了。

因此,对于因hibernate而导致的常见错误和常见错误的任何输入,最终都会导致响应缓慢,我们将不胜感激。

例子:渴望代替懒惰可以大大改变响应时间…。

编辑:通常,阅读手册通常是一个好主意。整个章节在这里涵盖了这个主题:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html


问题答案:

最常见的陷阱之一是臭名昭著的 n +
1选择问题
。默认情况下,Hibernate不会加载您不需要的数据。这减少了内存消耗,但使您面临n +
1选择的问题,可以通过切换到正确的提取策略来检索将对象加载到适当初始化状态所需的所有数据来避免此问题。

但是也不要取太多,否则会遇到相反的问题,即 笛卡尔积问题 :与执行许多SQL语句不同,您可能最终会创建检索过多数据的语句。

这就是调优的全部目的:为应用程序的每个用例(或至少对于需要调整的用例),在数据不足和数据过多之间找到中间点。

我的建议:

  • 首先在Hibernate级别激活SQL日志记录
  • 运行关键的用例(20%的人使用了80%的时间),或者如果您有那么奢侈的话,甚至全部使用
  • 识别可疑查询并html" target="_blank">优化提取计划,检查索引是否使用正确等
  • 参与您的DBA


 类似资料:
  • 问题内容: 我有问题,也许有人认为它很愚蠢。Hibernate快吗?我在系统中使用它,对数据库的查询非常多。并且性能变得警觉。和其他问题脱离当前背景。有什么更好的选择- 许多简单查询(使用单个表)还是较少一些查询的查询? 先进的坦克的Artem 问题答案: 首先,您可以做很多事情来加快Hibernate的速度。查阅这些高性能hibernate技巧文章,以全面了解可以采取哪些措施来加快数据访问层的速

  • 问题内容: 我正在使用Hibernate 3编写Web应用程序。 所以,过了一会儿,我注意到有些东西很慢。因此,我测试了Hibernate Profiler,发现Hibernate将无理地进行许多数据库调用以简化操作。原因当然是我加载了一个对象(该对象有几个“父母”),而这些“父母”还有其他“父母”。因此,即使我只需要基本对象,从根本上来说,hibernate都会加载它们。好的,所以我研究了延迟加

  • 问题内容: 我有一个Spring和Hibernate3在生产中运行良好的应用程序。以下是Spring的applicationContext.xml中会话工厂的配置 生产正常。 现在,对于另一个项目,我们正在迁移到Hibernate4。我们使用org.springframework.orm.hibernate4。*包中的Hibernate 4的SessionFactory,TransacionMan

  • 问题内容: 这是一个Hibnerate多态性问题和一个数据模型设计问题。他们交织在一起。过去我曾经使用过Hibernate,并且很喜欢它,但是有时候我发现很难想到除了琐碎的设计之外的任何事情。不能敲打hibernate;只是观察到ORM通常可能具有挑战性。 我认为这是一个Hibernate 101问题,但我不确定。我试图实现的目标甚至不可能。 我有一个抽象类Fruit,它将被分为Apple和Ora

  • 问题内容: 我正在建立一对多的关系。所以,我有一个父母和一个孩子。级联属性设置为全部。 我想知道我们是否考虑以下代码: Q1)如果父级拥有该关系,如,对于父级inverse = false,那么是否会在数据库中更新子级元素? Q2)如果孩子拥有关系,如,对于父inverse = true,则是否会在数据库中更新子元素添加? Q3)在是否可以看到更新的方面,谁拥有关联关系对上述代码没有影响? 非常感

  • 问题内容: 我在注释和上遇到了问题。在Hibernate中运行代码时,我得到: 引起原因:org.hibernate.PropertyAccessException:无法通过com.test.entities.EmployeeId.serverId的反射设置器设置字段值 但是,让我们从头开始…我有一个实体的复合主键,它由指向其他两个实体(和)的外键组成。为了设计简洁,我在Employee实体中使用