`

hibernate batch size & fetch size

阅读更多

原文 http://hi.baidu.com/lifa868/blog/item/1326b6da3f60696cd1164ef2.html

 

 hibernate.jdbc.fetch_size 50

hibernate.jdbc.batch_size 25

 

这两个选项非常非常非常重要!!!将严重影响Hibernate的CRUD性能!

 

C = create, R = read, U = update, D = delete

 

Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数。

 

例如一次查询1万条记录,对于Oracle的JDBC驱动来说,是不会1次性把1万条取出来的,而只会取出Fetch Size条数,当纪录集遍历完了这些记录以后,再去数据库取Fetch Size条数据。

 

因此大大节省了无谓的内存消耗。当然Fetch Size设的越大,读数据库的次数越少,速度越快;Fetch Size越小,读数据库的次数越多,速度越慢。

 

这有点像平时我们写程序写硬盘文件一样,设立一个Buffer,每次写入Buffer,等Buffer满了以后,一次写入硬盘,道理相同。

 

Oracle数据库的JDBC驱动默认的Fetch Size=10,是一个非常保守的设定,根据我的测试,当Fetch Size=50的时候,性能会提升1倍之多,当Fetch Size=100,性能还能继续提升20%,Fetch Size继续增大,性能提升的就不显著了。

 

因此我建议使用Oracle的一定要将Fetch Size设到50。

 

不过并不是所有的数据库都支持Fetch Size特性,例如MySQL就不支持。

 

MySQL就像我上面说的那种最坏的情况,他总是一下就把1万条记录完全取出来,内存消耗会非常非常惊人!这个情况就没有什么好办法了 :(

 

Batch Size是设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小,有点相当于设置Buffer缓冲区大小的意思。

 

Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。我做的一个测试结果是当Batch Size=0的时候,使用Hibernate对Oracle数据库删除1万条记录需要25秒,Batch Size = 50的时候,删除仅仅需要5秒!!!

//
我们通常不会直接操作一个对象的标识符(identifier), 因此标识符的setter方法应该被声明为私有的(private)。这样当一个对象被保存的时候,只有Hibernate可以为它分配标识符。 你会发现Hibernate可以直接访问被声明为public,private和protected等不同级别访问控制的方法(accessor method)和字段(field)。 所以选择哪种方式来访问属性是完全取决于你,你可以使你的选择与你的程序设计相吻合。

所有的持久类(persistent classes)都要求有无参的构造器(no-argument constructor); 因为Hibernate必须要使用Java反射机制(Reflection)来实例化对象。构造器(constructor)的访问控制可以是私有的 (private), 然而当生成运行时代理(runtime proxy)的时候将要求使用至少是package级别的访问控制,这样在没有字节码编入 (bytecode instrumentation)的情况下,从持久化类里获取数据会更有效率一些。

分享到:
评论

相关推荐

    优化Hibernate性能的几点建议

    此外,还可以通过分析Hibernate的性能指标来调整诸如`hibernate.jdbc.batch_size`等参数,以达到最佳性能平衡。 总之,通过上述几个方面的优化措施,可以显著提高基于Hibernate构建的应用程序的性能。在实际应用中...

    SSH笔记-检索策略(lazy、fetch、batch-size)

    本笔记将聚焦于Hibernate中的类级别检索策略以及`lazy`、`fetch`和`batch-size`这三个属性的使用,帮助开发者更高效地管理数据库查询。 1. **懒加载(Lazy Loading)** `lazy`属性是Hibernate的懒加载机制,用于...

    让hibernate输出sql语句参数配置.doc

    hibernate.default_batch_fetch_size 参数用于设置 Hibernate 关联的批量抓取默认数量。其取值建议为 4、8 或 16。 9. hibernate.default_entity_mode hibernate.default_entity_mode 参数用于指定由这个 ...

    Hibernate 参数配置详解

    例如,通过设置合适的 `hibernate.max_fetch_depth` 和 `hibernate.default_batch_fetch_size` 可以显著提升应用性能;而启用 `hibernate.generate_statistics` 则有助于我们更好地监控和分析应用性能瓶颈。此外,...

    hibernate.cfg.xml中配置信息详解

    Hibernate.default_batch_fetch_size 属性用于控制 Hibernate 的批量抓取的默认数量。该属性的值可以是 4、8 或 16,建议的取值是 4、8 或 16。 hibernate.default_entity_mode Hibernate.default_entity_mode ...

    ewrwerw

    根据提供的部分内容,我们可以提炼出与Hibernate框架相关的两个关键配置参数:`hibernate.jdbc.fetch_size` 和 `hiberate.jdbc.batch_size`。这两个参数对于优化基于Hibernate的数据库操作性能至关重要。 ### 1. ...

    Hibernate3的配置参数汇总

    - `hibernate.default_batch_fetch_size`:设置默认的批量抓取大小,提高查询性能。 - `hibernate.default_entity_mode`:定义Session的默认实体模式,例如POJO或DTO。 这些配置参数可以帮助开发者根据具体项目...

    hibernate配置参数大全

    8. **`hibernate.default_batch_fetch_size`**:定义默认批量获取的大小。 - 示例: ```properties hibernate.default_batch_fetch_size=16 ``` 9. **`hibernate.default_entity_mode`**:定义默认的实体映射...

    Hibernate 参数设置一览表.doc

    7. **hibernate.default_batch_fetch_size**:设置批量获取关联对象的数量,默认值可能需要根据实际应用情况进行调整,一般建议值为4、8或16。 8. **hibernate.default_entity_mode**:定义了SessionFactory打开的...

    hibernate 配置属性参数详情(全)

    7. **hibernate.default_batch_fetch_size**:默认的批量抓取大小,可以提高性能,常见的推荐值为4、8、16。 8. **hibernate.default_entity_mode**:指定Session使用的实体表示模式,如`dynamic-map`、`dom4j`或`...

    Hibernate笔记

    - **Batch Size**: 与`Fetch Size`不同,`batch_size`属性主要针对批量操作的优化。 - **配置示例**: ```xml <property name="hibernate.jdbc.batch_size">30 ``` #### 六、查询示例 - **HQL查询示例**: - ...

    hibernate参数配置

    7. **hibernate.default_batch_fetch_size**: 设置默认的批量抓取关联的数量,如4、8或16,可以提高查询效率。 8. **hibernate.default_entity_mode**: 指定SessionFactory打开的Session的默认实体表现模式,可以是...

    hibernate配置参数详解

    7. **`hibernate.default_batch_fetch_size`**: 默认的批量加载大小。 ```properties hibernate.default_batch_fetch_size=10 ``` 这个配置项设置了Hibernate在执行批量加载操作时的默认批次大小。 8. **`...

    hibernate_3配置文件参数汇总

    - `hibernate.default_batch_fetch_size`:设置默认的批量获取大小,优化关联查询的效率。通常建议的值是4、8或16。 - `hibernate.default_entity_mode`:定义实体的默认表示方式,比如使用POJOs(Plain Old Java ...

    Hibernate JPA

    - `hibernate.jdbc.fetch_size` 和 `hibernate.jdbc.batch_size`: 调整JDBC抓取和批处理的数量。 - `hibernate.show_sql` 和 `hibernate.format_sql`: 显示和格式化最终执行的SQL语句。 ##### 3. Hibernate JPA ...

    hibernate配置文件hibernate.cfg.xml的详细解释

    - **Batch Size**: `<property name="jdbc.batch_size">23</property>` 控制Hibernate批量操作时每次处理的数据量,较大的值可以减少网络传输次数,但可能增加内存负担。 - **Use Scrollable Result Set**: `...

    Hibernate可选配置大全

    hibernate.default_batch_fetch_size - **功能**:设置批量查询的默认大小,优化多次查询的效率。 - **取值**:整数,推荐`4`、`8`、`16`等。 - **用途**:提高数据加载速度,减少数据库交互次数。 ##### 9. ...

    Hibernate配置各种数据源详解

    Hibernate配置各种数据源 <hibernate-configuration> <!– 各属性的配置–> <!—为true表示将Hibernate发送给数据库的sql显示出来 –> ...”dialect”>...”jdbc.batch_size”>30</property>

    hibernate配置详解

    7. **hibernate.default_batch_fetch_size** 设置默认的批量抓取大小,用于关联的批量加载,提高性能。推荐的值通常为4、8或16。 8. **hibernate.default_entity_mode** 设置默认的实体表示模式,可以选择动态...

Global site tag (gtag.js) - Google Analytics