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 
												 |