通常的休眠性能陷阱

Ant*_*val 9 java performance orm hibernate

我们刚刚完成了我们的应用程序.(她开始变慢).问题似乎是"在休眠状态".

这是一个遗留映射.谁工作,做它的工作.关系背后的关系也是好的.

但是有些要求很慢.

因此,我们将不胜感激任何关于hibernate常见和常见错误的输入,这些错误最终会导致响应缓慢.

例如:渴望代替懒惰可以大大改变响应时间....


编辑:像往常一样,阅读手册通常是个好主意.整章涵盖了这个主题:

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

Pas*_*ent 17

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

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

这就是调整的重点:找到应用程序的每个用例(或者至少需要调整的用例)的数据不足和数据太多.

我的建议:

  • 首先在Hibernate级别激活SQL日志记录
  • 运行关键用例(20%在80%的时间内使用),如果你有这种奢侈,甚至是所有这些用例
  • 识别可疑查询并优化获取计划,检查索引是否正确使用等
  • 涉及你的DBA