转一个更详细的:
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以上,性能提升的非常微弱,反而消耗内存更加多,就没有必要了。
分享到:
相关推荐
hibernate的类级别检索策略和检索策略的lazy、fetch、batch-size属性使用
中取出的记录条数,一般设置为30、50、100.Oracle数据库的JDBC驱动默认的Fetch Size=15,设置Fetch Size设置为:30、50,性能会有明显提升,如果继续增大,超出100,性能提升不明显,反而会消耗内存。 即在...
2、针对Oracle数据库而言,Fetch Size 是设定JDBC的Statement读取数据的时候每次从数据库中取出的记录条数,一般设置为30、50、100.Oracle数据库的JDBC驱动默认的Fetch Size=15,设置Fetch Size设置为:30、50,性能...
Sqlite SQL基本语法汇总,在其官方网站及网络整理的。
Fetch-and-JSON-Studio
Fetch is a simple, powerful, customizable file download manager library for Android. Features Simple and easy to use API. Continuous downloading in the background. Concurrent downloading support. ...
Autonomy提供的OracleFetch用户手册
Fetch Robot
ClouderaImpala_JDBC-2.6.18.1021
讲述java中JDBC的批处理功能,讲述java中JDBC的批处理功能,讲述java中JDBC的批处理功能
具有详细的SpringDataJPA配置及文档说明,让你更快的理解SpringDataJPA持久层方案
Over-fetching and under-fetching data can negatively impact the performance of your web application. Future-proof your API structure and handle key development requirements by correctly defining types...
Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
Laravel开发-fetch 把你雄辩的模特拿来
正确理解hibernate fetch 的作用
iOS 7学习:多任务处理之Background Fetch对应的Demo,已经修正不断Background Fetch中出现的多线程锁问题。
最近在分析 Sql Server 2012 中 offset and fetch 的新特性,发现 offset and fetch 无论语法的简洁还是功能的强大,都是相当相当不错的
Fetch error error fetch fetch
maven-fetch-20030525.145948.jar
Fetch:一个PHP的IMAP库,用于读取邮件和附件