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

fetchSize and batchSize

    博客分类:
  • zt
 
阅读更多
转一个更详细的:

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秒!!!

可见有多么大的性能提升!很多人做Hibernate和JDBC的插入性能测试会奇怪的发现Hibernate速度至少是JDBC的两倍,就是因为Hibernate使用了Batch Insert,而他们写的JDBC没有使用Batch的缘故。

以我的经验来看,Oracle数据库 Batch Size = 30 的时候比较合适,50也不错,性能会继续提升,50以上,性能提升的非常微弱,反而消耗内存更加多,就没有必要了。
分享到:
评论

相关推荐

    微软内部资料-SQL性能优化3

    Lesson 2: Concepts – Batch and Transaction 31 Lesson 3: Concepts – Locks and Applications 51 Lesson 4: Information Collection and Analysis 63 Lesson 5: Concepts – Formulating and Implementing ...

    Oracle 10g JDBC API Reference

    11. **性能优化**:通过设置JDBC属性,如fetchSize、batchSize等,可以优化查询性能。另外,合理使用索引、避免全表扫描也是提升性能的关键。 12. **JDBC连接配置**:Oracle JDBC驱动需要配置数据库用户名、密码、...

    hibernate.properties

    #hibernate.default_batch_fetch_size 8 ## rollback generated identifier values of deleted entities to default values #hibernate.use_identifier_rollback true ## enable bytecode reflection...

    Hibernate.cfg.xml配置总结[借鉴].pdf

    批量操作可以提高数据库操作效率,`jdbc.fetch_size`和`jdbc.batch_size`属性分别控制查询时的批处理大小和更新/删除操作的批处理大小: ```xml <property name="jdbc.fetch_size">50 <property name="jdbc.batch_...

    hibernate配置属性参数[定义].pdf

    7. `hibernate.default_batch_fetch_size`:设置默认的批量抓取关联的数量,可以提高性能。推荐的值通常为 4、8 或 16。 8. `hibernate.default_entity_mode`:指定 SessionFactory 打开的 Session 中实体的默认...

    Hibernate 参数设置一览表.doc

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

    ajax配置模版

    <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size} <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size} ``` - **`propertyConfiguer`**: 使用`...

    面试SSH常问问题及java面试的一些常问问题

    Hibernate提供了一些配置项来优化数据库访问效率,例如`hibernate.jdbc.fetch.size`和`hibernate.jdbc.batch.size`。 - `hibernate.jdbc.fetch.size`:设置Hibernate在执行查询时,每次从数据库获取的记录数量。...

    php.ini-development

    Turning on this setting and managing its maximum buffer size can yield some ; interesting side-effects depending on your application and web server. ; You may be able to send headers and cookies ...

    Hibernate数据源的连接

    - `jdbc.fetch_size` 和 `jdbc.batch_size`:分别用于设置查询时每次获取的数据量和批处理操作的大小,优化数据库性能。 在实际开发中,我们还需要编写SessionFactory的代码来初始化配置并获取数据库连接。例如: ...

    Hibernate.cfg.xml配置总结

    3. `jdbc.fetch_size`和`jdbc.batch_size`: 分别设置了每次查询的记录数和批量操作的大小,可以优化数据库交互的性能。 四、实体类映射 在Hibernate.cfg.xml中,`<mapping>`元素用于指定实体类对应的映射文件,...

    Weblogic上配置Hibernate为JNDI

    在`hibernate.properties`中,还可以配置`hibernate.jdbc.fetch_size`和`hibernate.jdbc.batch_size`以优化数据库操作性能。`fetch_size`设置一次查询返回的记录数量,`batch_size`则是在批量操作时一次提交的SQL...

    支持多数据库的ORM框架ef-orm.zip

    同时每个查询都可以针对batch、fetchSize、maxResult、缓存、级联操作类型等进行调整和开关,可以将性能调到最优。可在主流数据库之间任意切换 支持Oracle、MySQL、Postgres、MSSQL、GBase、SQLite、HSQL、Derby等...

    hibernate关联映射的作用和常用属性解释

    - **`batch-size`**:批量加载记录的数量,默认为`1`。 - **`optimistic-lock`**:乐观锁策略,默认为`version`。 - **`lazy`**:是否启用延迟加载,默认为`false`。 - **`entity-name`**:实体的逻辑名称。 - **`...

Global site tag (gtag.js) - Google Analytics