﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-我心飞翔-文章分类-Hibernate</title><link>http://www.blogjava.net/parable-myth/category/12081.html</link><description>JAVA、LINUX我的爱 我的世界</description><language>zh-cn</language><lastBuildDate>Thu, 07 Jun 2007 21:05:41 GMT</lastBuildDate><pubDate>Thu, 07 Jun 2007 21:05:41 GMT</pubDate><ttl>60</ttl><item><title>hibernate性能优化</title><link>http://www.blogjava.net/parable-myth/articles/122348.html</link><dc:creator>我心飞翔</dc:creator><author>我心飞翔</author><pubDate>Wed, 06 Jun 2007 05:52:00 GMT</pubDate><guid>http://www.blogjava.net/parable-myth/articles/122348.html</guid><wfw:comment>http://www.blogjava.net/parable-myth/comments/122348.html</wfw:comment><comments>http://www.blogjava.net/parable-myth/articles/122348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/parable-myth/comments/commentRss/122348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/parable-myth/services/trackbacks/122348.html</trackback:ping><description><![CDATA[1、针对oracle数据库而言，Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数，一般设置为30、50、100。Oracle数据库的JDBC驱动默认的Fetch Size=15，设置Fetch Size设置为：30、50，性能会有明显提升，如果继续增大，超出100，性能提升不明显，反而会消耗内存。<br /><br />　　即在hibernate配制文件中进行配制：<br />1 &lt;property name="hibernateProperties"&gt;<br />2 &lt;props&gt;<br />3 &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.Oracle9Dialect&lt;/prop&gt;<br />4 &lt;prop key="hibernate.show_sql"&gt;false&lt;/prop&gt;<br />5 &lt;!-- Create/update the database tables automatically when the JVM starts up<br />6 &lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt; --&gt;<br />7 &lt;!-- Turn batching off for better error messages under PostgreSQL <br />8 &lt;prop key="hibernate.jdbc.batch_size"&gt;100&lt;/prop&gt; --&gt;<br />9 &lt;prop key="hibernate.jdbc.batch_size"&gt;50&lt;/prop&gt;<br />10 &lt;/props&gt;11 &lt;/property&gt;Fetch Size设的越大，读数据库的次数越少，速度越快；Fetch Size越小，读数据库的次数越多，速度越慢。<br /><br />2、如果是超大的系统，建议生成htm文件。加快页面提升速度。<br /><br />　　3、不要把所有的责任推在hibernate上，对代码进行重构，减少对数据库的操作，尽量避免在数据库查询时使用in操作，以及避免递归查询操作，代码质量、系统设计的合理性决定系统性能的高低。<br /><br />　　4、 对大数据量查询时，慎用list()或者iterator()返回查询结果， <br /><br />　　（1）. 使用List()返回结果时，Hibernate会所有查询结果初始化为持久化对象，结果集较大时，会占用很多的处理时间。 <br /><br />　　（2）. 而使用iterator()返回结果时，在每次调用iterator.next()返回对象并使用对象时，Hibernate才调用查询将对应的对象初始化，对于大数据量时，每调用一次查询都会花费较多的时间。当结果集较大，但是含有较大量相同的数据，或者结果集不是全部都会使用时，使用iterator ()才有优势。<br /><br />　　5、在一对多、多对一的关系中，使用延迟加载机制，会使不少的对象在使用时方会初始化，这样可使得节省内存空间以及减少数据库的负荷，而且若PO中的集合没有被使用时，就可减少互数据库的交互从而减少处理时间。 <br /><br />　　6、对含有关联的PO（持久化对象）时，若default-cascade="all"或者 “save-update”，新增PO时，请注意对PO中的集合的赋值操作，因为有可能使得多执行一次update操作。 <br /><br />　　7、对于大数据量新增、修改、删除操作或者是对大数据量的查询，与数据库的交互次数是决定处理时间的最重要因素，减少交互的次数是提升效率的最好途径，所以在开发过程中，请将show_sql设置为true，深入了解Hibernate的处理过程，尝试不同的方式，可以使得效率提升。尽可能对每个页面的显示，对数据库的操作减少到100----150条以内。越少越好。<br /><br />　　以上是在进行struts+hibernate+spring进行项目开发中，对hibernate性能优化的几点心得。<img src ="http://www.blogjava.net/parable-myth/aggbug/122348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/parable-myth/" target="_blank">我心飞翔</a> 2007-06-06 13:52 <a href="http://www.blogjava.net/parable-myth/articles/122348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>