写程序,做产品,过日子

成功其实很简单,就是强迫自己坚持下去

BlogJava 首页 新随笔 联系 聚合 管理
  69 Posts :: 1 Stories :: 92 Comments :: 0 Trackbacks
Insert title here

为了验证 Hibernate 批量数据插入的性能,选择合适的 batchsize ,我做了一个 benchmark 的测试。可是测试的结果非常奇怪。 Jdbc.batch_size 的设置对性能基本没有影响。

注意,本文中所有测试时间单位为毫秒。

第一组测试, batch size 比较

为插入 1000 条订单数据,循环中没有做 flush ,每种 batchsize 重复测 10 次。得到结果如下。

这此数据显示不设 batch size 性能反而最好,但是差别极小。这是什么原因?!

jdbc.batchsize

1

2

3

4

5

6

7

8

9

10

平均值

100

4468

4703

4468

4297

4390

4266

4406

4281

4328

4234

4384

50

4250

4328

4313

4266

4281

4235

4719

4343

4344

4375

4345

30

4484

4859

4313

4047

4204

4359

4422

4469

4344

4266

4377

10

4313

4578

4281

4312

4282

4657

4063

4313

4312

4313

4342

不设置

4219

4235

4187

4235

4297

4297

4343

4313

4250

4312

4269

 

第二组测试 , flush size 比较

与第一组一样插入 1000 条订单数据, batch size 100 。循环中每一定条数做一次 flush 。得到结果如下。

这组测试结果基本正常。 Flush size 赿大,时间赿少。但时间少的原因很可能是清理缓存的次数少,而非批处理之功。

flush size

1

2

3

4

5

6

7

8

9

10

平均

100

4813

4719

4750

4984

4906

4735

5094

4734

5000

4906

4864

50

5687

5703

5422

5438

5578

5516

5578

5391

5547

5500

5536

30

6281

6266

6281

5797

6172

6704

6250

6453

5875

6469

6255

10

7953

8640

8672

9047

8547

8922

8640

7844

8062

8625

8495

 

第三组测试,继承表插入

前面两组测试,都是单表插入。本组是双表插入:一个基类表,一个子类表,按 Table per Sub Class 进行 O/R Mapping Batch size 100 Flush size 为  1000, 50, 30, 10 和不做 flush

这个结果也是基本正常

 

flush size

1

2

3

平均

100

5891

5703

5859

5818

50

6672

6625

6766

6688

30

7797

7344

7875

7672

10

9328

9406

9234

9323

不做flush

5250

5203

5172

5208

 

posted on 2007-03-27 10:43 Welkin Hu 阅读(4283) 评论(5)  编辑  收藏 所属分类: Java

Feedback

# re: 实测显示Hibernate的batch_size配置没有作用 2007-03-27 11:13 爬虫工作室
看不懂  回复  更多评论
  

# re: 实测显示Hibernate的batch_size配置没有作用 2007-03-27 11:58 dennis
用的是什么数据库有关吧,我记的mysql的JDBC驱动是不支持batch  回复  更多评论
  

# re: 实测显示Hibernate的batch_size配置没有作用 2007-03-28 08:53 Welkin Hu
忘了说了,我用的是Oracle 10g测的。它是支持batch处理的。  回复  更多评论
  

# re: 实测显示Hibernate的batch_size配置没有作用[未登录] 2007-04-10 15:21 johnny
数据量太少了,体现不出效果,我曾经做过10000条数量级,当时没有留意Hibernate有batch_size这设置,我是在程序里面控制的(通过嵌套循环),然后用一个配置文件设置一个batch_size,总之原理跟Hibernate设置batch_xize差不多,测试证明,这个数值不是越大、或者越小就有某种趋势,而是应该有一个适合的大小。

如果过大,优点是插入的语句次数小,但缺点是每次事务提交的数据量大,内存占用也厉害。
如果过小,优缺点刚好相反,所以不能笼统的说设置的值越大或者越小就越好,需要测试过,跟进实践情况而定。  回复  更多评论
  

# re: 实测显示Hibernate的batch_size配置没有作用 2007-04-25 09:23 Welkin Hu
数据量多也不明显。夏昕在《深入浅出Hibernate》中有介绍:Oracle就是这特性,得好的服务器配置才能体现其优点。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: