加快你的Hibernate引擎(上)[Java编程]
本文“加快你的Hibernate引擎(上)[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1.引言
Hibernate是最风行的对象关系映射(ORM)引擎之一,它供应了数据长期化和查询服务.
在你的项目中引入Hibernate并让它跑起来是很简单的.但是,要让它跑得好倒是需求很多时间和经验的.
通过我们的利用Hibernate 3.3.1和Oracle 9i的能源项目中的一些例子,本文涵盖了很多Hibernate调优技术.此中还供应了一些掌握Hibernate调优技术所必须的数据库知识.
我们假定读者对Hibernate有一个基本的理解.假如一个调优办法在Hibernate 参考文档(下文简称HRD)或其他调优文章中有具体描写,我们仅供应一个对该文档的引用并从差别角度对其做简单阐明.我们关注于那些行之有效,但又贫乏文档的调优办法.
2.Hibernate性能调优
调优是一个迭代的、持续举行的历程,触及软件开辟生命周期(SDLC)的全部阶段.在一个典型的利用Hibernate举行长期化的Java EE利用程序中,调优会触及以下几个方面:
业务法则调优
计划调优
Hibernate调优
Java GC调优
利用程序容器调优
底层系统调优,包含数据库和OS.
没有一套尽心计划的筹划就去举行以上调优是非常耗时的,并且极大概收效甚微.好的调优办法的重要部份是为调优内容划分优先级.可以用Pareto定律(又称“80/20法例”)来注释这一点,即普通80%的利用程序性能改进源自头20%的性能问题[5].
相比基于磁盘和网络的拜候,基于内存和CPU的拜候能供应更低的耽误和更高的吞吐量.这种基于IO的Hibernate调优与底层系统IO部份的调优应当优先于基于CPU和内存的底层系统GC、CPU和内存部份的调优.
典范1
我们调优了一个挑选电流的HQL查询,把它从30秒降到了1秒以内.假如我们在垃圾回收方面下工夫,大概收效甚微——大概只有几毫秒大概最多几秒,相比HQL的改良,GC方面的改进可以忽视不计.
好的调优办法的另一个重要部份是决意什么时刻优化[4].
主动优化的倡导者主张开始时就举行调优,比方在业务法则和计划阶段,在整个SDLC都持续举行优化,因为他们认为后期改变业务法则和重新计划代价太大.
另一派人倡导在SDLC末期举行调优,因为他们抱怨前期调优常常会让计划和编码变得复杂.他们常常引用Donald Knuth的名言“过早优化是万恶之源” [6].
为了均衡调优和编码需求一些衡量.按照笔者的经验,得当的前期调优能带来更明智的计划和具体的编码.很多项目就失利在利用程序调优上,因为上面提到的“过早优化”阶段在被引用时脱离了上下文,并且呼应的调优不是被推迟得太晚就是投入资源过少.
但是,要做很多前期调优也不太大概,因为没有经过解析,你并不能肯定利用程序的瓶颈毕竟在何处,利用程序普通都是这样演变的.
对我们的多线程企业级利用程序的解析也表现出大大都利用程序平均只有20-50%的CPU利用率.剩余的CPU开销只是在等候数据库和网络相关的IO.
基于上述解析,我们得出这样一个结论,结合业务法则和计划的Hibernate调优在Pareto定律中20%的那个部份,呼应的它们的优先级更高.
一种对比实际的做法是:
辨认出主要瓶颈,可以预见此中大都是Hibernate、业务法则和计划方面的(其数目视你的调优目标而定;但三到五个是不错的初阶).
改正利用程序以便消除这些瓶颈.
测试利用程序,然后反复步骤1,直到到达你的调优目标为止.
你能在Jack Shirazi的《Java Performance Tuning》[7]一书中找到更多关于性能调优阶段的常见倡议.
下面的章节中,我们会按照调优的大致次序(列在前面的普通影响最大)去注释一些特定的调优技术.
以上是“加快你的Hibernate引擎(上)[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |