`
j_butterfly
  • 浏览: 113664 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate性能调优心得

阅读更多

http://www.ucai8.com/viewNote.do?noteId=402881851e2c5780011e350260e801ca

 

前几天查看后台的日志时,发现常出现Hibernate的警告信息:

WARN (org.hibernate.hql.ast.QueryTranslatorImpl:328) - firstResult/maxResults specified with collection fetch; applying in memory!
  在中文Google上搜了搜,没有找到什么有用的信息,之后在英文的Google上搜了一下,出了很多介绍这方面的文章,写的最好的,我觉得是这篇文章,有测试用例来说明一切:
  我大概总结一下:在查询一对多关系数据,后面会用到“多”的数据。数据量比较大的时候(从数据库取500条记录以上),用fetch join比较好,Hibernate官方的文档也说了,它会只执行1条SQL语句。但是如果用分页查询时,比如一次才取50条数据时,不用fetch join要快,因为如果用了fetch join后,hibernate并不能在数据库进行分页,会把所有数据库到内存中,然后分页,当然性能 会差的很远(所以会报一个前面我写的警告信息)。这时用延时加载比如快,这时还可以更加优化,通过指定batch-size的大小,来批量从数据中读。
  通过自己的测试,光是Hibernate发出的SQL语句就少了很多。之前我用Fetch join用分布时有200多条Sql语句产生,不用fetch join时只有23条了,再加了batch-size优化后只有16条sql了。所以要对不同的情况,进行不同的优化,才能让性能最佳!

22
7
分享到:
评论
6 楼 clarkcc1988 2010-04-06  
j_butterfly 写道
clarkcc1988 写道
你好 我提个问题可以吗
首先第一个问题是:你的一对多关联关系中是否使用了延迟加载 lazy=true or false
其次 如果说在分页查询的时候不使用left join fetch 的话 是 性能的问题解决了。 但是在前台会出现 延迟加载的错误 failed to lazily initialize a collection of role

我的情况是
1.使用了延迟加载
2.一对多关联关系
3.功能是 搜出1方的集合 并且还要显示 每个一方所对应的多方集合
4.我没有使用opensessioninview

我的QQ号是171757607  我不是经常来上JAVAEYE
所以请你加我的QQ 这块我在开发中遇见了一些问题 希望与你沟通 

 
那为什么不用OpenSessionInView呢?
如果不用那就在查询的代码里设置lazy 为 false了




OpenSessionInView是一把双刃剑 使用在外网上面 有可能会造成页面死锁
你加我的QQ了吗?
5 楼 j_butterfly 2010-03-05  
clarkcc1988 写道
你好 我提个问题可以吗
首先第一个问题是:你的一对多关联关系中是否使用了延迟加载 lazy=true or false
其次 如果说在分页查询的时候不使用left join fetch 的话 是 性能的问题解决了。 但是在前台会出现 延迟加载的错误 failed to lazily initialize a collection of role

我的情况是
1.使用了延迟加载
2.一对多关联关系
3.功能是 搜出1方的集合 并且还要显示 每个一方所对应的多方集合
4.我没有使用opensessioninview

我的QQ号是171757607  我不是经常来上JAVAEYE
所以请你加我的QQ 这块我在开发中遇见了一些问题 希望与你沟通 

 
那为什么不用OpenSessionInView呢?
如果不用那就在查询的代码里设置lazy 为 false了
4 楼 clarkcc1988 2010-02-25  
你好 我提个问题可以吗
首先第一个问题是:你的一对多关联关系中是否使用了延迟加载 lazy=true or false
其次 如果说在分页查询的时候不使用left join fetch 的话 是 性能的问题解决了。 但是在前台会出现 延迟加载的错误 failed to lazily initialize a collection of role

我的情况是
1.使用了延迟加载
2.一对多关联关系
3.功能是 搜出1方的集合 并且还要显示 每个一方所对应的多方集合
4.我没有使用opensessioninview

我的QQ号是171757607  我不是经常来上JAVAEYE
所以请你加我的QQ 这块我在开发中遇见了一些问题 希望与你沟通 
3 楼 j_butterfly 2008-12-17  
yuanye218 写道

提个问题:第一次Join fetch: 1,219 millis 第二次(分页)Join fetch: 1,660 millis 个人感觉这两次查询没有区别,都是把数据一次读入到内存。paging只是多了在内存中的分页,为什么时间会差距这么大呢?

我猜,可能是多了一次对所有数据进行循环,取分页大小数据。可能取前20条时,时间差的不是很多,但如果取最后20条时,时间会长一些。这个还是要问hibernate对这两种情况的实现方式了吧
2 楼 yuanye218 2008-12-16  
提个问题:
第一次Join fetch: 1,219 millis
第二次(分页)Join fetch: 1,660 millis
个人感觉这两次查询没有区别,都是把数据一次读入到内存。
paging只是多了在内存中的分页,为什么时间会差距这么大呢?
1 楼 yourgame 2008-12-15  
看着hibernate的语句就怕怕,当然优化后少了很多很多,但是感觉还是很多很多。感觉 iBatis比较适合自己。

相关推荐

    Jboss性能优化整合

    《JBoss性能优化整合》是一份深度探讨Jboss应用服务器性能提升的重要资料,它集结了作者反复试验与研究的心得,旨在为...无论你是初学者还是经验丰富的开发者,都能从中获得宝贵的性能调优知识,为你的项目保驾护航。

    Hibernate插入数据

    本篇将详细探讨“Hibernate插入数据”的相关知识点,结合学习心得,深入理解并掌握其核心原理与实践技巧。 首先,Hibernate通过对象关系映射(ORM)技术,将数据库表与Java类关联起来,使得数据库操作可以通过对象...

    Hibernate开发手册

    - **性能调优**:包括索引优化、查询优化等方面,对于大型应用尤为重要。 #### 八、实战案例与最佳实践 - **项目集成**:将 Hibernate 集成到现有项目中,需要注意与已有架构的兼容性问题。 - **错误处理**:了解...

    java面试心得

    - **Oracle性能调优**:Oracle数据库是企业级应用的首选数据库之一,其性能直接影响到系统的响应时间和资源利用率。性能调优涉及多个方面,包括SQL语句优化、索引设计、缓存策略等。 - **基于规则的性能分析**:理解...

    java--夜未眠<过来人的心得>

    9. **JVM**:内存模型、垃圾收集、性能调优,理解类加载过程。 10. **Spring框架**:依赖注入、AOP(面向切面编程)、Spring Boot和Spring Cloud的使用。 11. **数据库操作**:SQL语言基础,JDBC连接数据库,事务...

    Java清华大学学生学习Java的心得总结

    笔记可能包含JVM的内存区域,垃圾收集机制,以及如何进行性能调优。 10. **Java Web开发**:如果笔记深入,可能会介绍Servlet、JSP等Web开发技术,以及Spring、Struts、Hibernate等主流框架。 总的来说,这份...

    撰写外刊论文的心得体会.zip

    5. **JAVA虚拟机(JVM)**:了解JVM的工作原理,如内存管理、垃圾回收、类加载机制,进行性能调优。 6. **JAVA框架**:如果论文中涉及到框架,如Spring、Hibernate、MyBatis等,需要理解其核心功能和使用方式。 7....

    hibernate1.rar_Java编程_Java_

    10. **性能调优**:包括批处理、连接池配置、查询优化等方面,是Hibernate实战中不可或缺的部分。 通过“hibernate1review”的学习,你可以逐步掌握这些核心概念,并在实践中运用,提升你的Java编程技能。同时,...

    HM深度技术剖析 JAVA Web全新维度 最新JAVA Web全面开发课程 最新技术与综合实战课程

    - **性能调优**:介绍如何通过合理配置提高Hibernate的应用性能。 #### 三、前端与后端协作 - **前后端分离模式**:探讨前后端分离的设计理念及其优势,包括数据交换格式(JSON/XML)、API接口设计规范等内容。 - *...

    java 高级架构进阶学习

    - **MySQL优化**:分享MySQL性能调优技巧,包括索引优化、查询语句改进等。 - **JVM调优**:探讨JVM内存模型、垃圾回收机制,并提供实际案例分析。 - **高并发处理**:介绍双十一技术复盘中的高并发秒杀系统设计...

    个人收集的java开发资源(会不断更新)

    8. **性能优化**:Java内存管理、垃圾回收机制,以及如何进行性能调优。 9. **面试准备**:常见的Java面试题,包括基础问题和进阶问题,帮助求职者准备面试。 10. **最佳实践**:从代码规范、测试策略到项目管理,...

    如何成为优秀的JAVA程序员

    - **性能调优**:掌握JVM参数设置,了解如何监控和分析程序性能瓶颈,进行优化。 ### 5. 学习和使用版本控制工具 - **Git**:掌握Git的基本操作,如分支管理、合并冲突、拉取和推送代码。 - **团队协作**:理解Git...

    [Java程序员职场全攻略:从小工到专家].吴亚峰.著.扫描版

    对于高级开发者而言,书中可能会讲述Java虚拟机(JVM)原理、性能调优、系统架构设计等更深层次的内容。 此外,作者可能还会分享个人的经验和心得,这些实战技巧对于想要进一步提升自己的Java程序员来说是非常宝贵...

    基于Javaee的影视创作论坛的设计与实现.rar

    利用性能测试工具如JMeter评估系统性能,进行调优。 通过以上步骤,我们可以构建出一个高效、稳定且用户友好的影视创作论坛。这个论坛不仅满足了影视创作者的交流需求,也为企业提供了推广作品、挖掘潜力人才的平台...

    java技术论坛

    2. **JVM(Java虚拟机)**:深入理解JVM的工作原理,如类加载机制、内存模型(堆、栈、方法区等)、性能优化和JVM调优实践。 3. **并发编程**:Java中的线程管理、同步机制(如synchronized、volatile、Lock接口等...

    java-developer-guide-samples:本仓库主要是用来记录Java开发者所需的基础和进阶知识,以及自己平时的思考和学习笔记

    2. **进阶主题**:仓库可能涵盖JVM(Java虚拟机)内部工作原理、垃圾收集机制、性能调优、反射、注解、模块化系统(如Jigsaw)、并发编程高级技术(如Fork/Join框架和CountDownLatch)等。理解JVM对于优化代码和解决...

    开发资料下载_各大公司的面试题、“鄙视”题

    描述中的链接指向了一个ITEYE博客,虽然没有具体内容,但我们可以推测博客可能包含了作者分享的一些面试经验和心得,或者提供了一些链接到具体面试题目的资源。 标签 "源码" 和 "工具" 提供了更多关于这个压缩包...

    Java学习路线.pdf

    - **撰写博客:** 记录学习过程中的心得体会,分享给社区。 - **参与社区:** 加入开源项目或参与 Stack Overflow 等社区讨论。 通过以上六个阶段的学习,您将逐步建立起扎实的 Java 技能基础,并能够独立完成...

Global site tag (gtag.js) - Google Analytics