•C3P0 数据库连接池属性
–
hibernate.c3p0.max_size:
数据库连接池的最大连接数
–
hibernate.c3p0.min_size:
数据库连接池的最小连接数
–
hibernate.c3p0.timeout:
数据库连接池中连接对象在多长时间没有使用过后,就应该被销毁
–
hibernate.c3p0.max_statements:
缓存
Statement
对象的数量
–
hibernate.c3p0.idle_test_period:
表示连接池
检测线程
多长时间检测一次池内的所有链接对象是否超时
.
连接池本身不会把自己从连接池中移除,而是专门有一个线程按照一定的时间间隔来做这件事,
这个线程通过比较连接对象最后一次被使用时间和当前时间的时间差来和
timeout
做对比,
进而决定是否销毁这个连接对象。
–
hibernate.c3p0.acquire_increment:
当数据库连接池中的连接耗尽时
,
同一时刻获取多少个数据库连接
•
其他
–
show_sql
:是否将运行期生成的
SQL
输出到日志以供调试。取值
true | false
–
format_sql
:是否将
SQL
转化为格式良好的
SQL .
取值
true | false
–
hbm2ddl.auto
:在启动和停止时自动地创建,更新或删除数据库模式。取值
create | update | create-drop | validate
–
hibernate.jdbc.fetch_size
–
hibernate.jdbc.batch_size
•
hibernate.jdbc.fetch_size
:
实质是调用
Statement.setFetchSize
()
方法
设定
JDBC
的
Statement
读取数据的时候每次从数据库中取出的记录条数
。
–
例如一次查询
1
万条记录,对于
Oracle
的
JDBC
驱动来说,是不会
1
次性把
1
万条取出来的,而只会取出
fetchSize
条数,
当结果集遍历完了这些记录以后,再去数据库取
fetchSize
条数据。因此大大节省了无谓的内存消耗。
Fetch Size
设的越大,读数据库的次数越少,速度越快;
Fetch Size
越小,读数据库的次数越多,速度越慢。
Oracle
数据库的
JDBC
驱动默认的
Fetch Size = 10
,是一个保守的设定,根据测试,当
FetchSize=50
时,
性能会提升
1
倍之多,当
f
etchSize
=100
,性能还能继续提升
20%
,
Fetch Size
继续增大,性能提升的就不显著了。
并不是所有的数据库都支持
Fetch Size
特性,例如
MySQL
就不支持
•
hibernate.jdbc.batch_size
:
设定对数据库进行批量删除,批量更新和批量插入的时候的批次大小
,
类似于设置缓冲区大小的意思。
batchSize
越大,批量操作时向数据库发送
sql
的次数越少,速度就越快。
–
测试结果是当
BatchSize=0
的时候,使用
Hibernate
对
Oracle
数据库删除
1
万条记录需要
25
秒,
Batch Size = 50
的时候,删除仅仅需要
5
秒!
Oracle
数据库
b
atchSize
=30
的时候比较合适。