实测显示Hibernate的batch_size配置没有作用

本文通过三组测试验证Hibernate批量插入性能,发现Jdbc.batch_size配置对性能提升有限,尤其是在继承表插入场景下。第一组测试表明不设置batch_size可能表现最佳,而第二组和第三组测试显示flush size对性能影响更显著。
摘要由CSDN通过智能技术生成

为了验证 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值