寫程序,做產品,過日子

          成功其實很簡單,就是強迫自己堅持下去

          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 閱讀(4300) 評論(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就是這特性,得好的服務器配置才能體現其優點。  回復  更多評論
            

          主站蜘蛛池模板: 安顺市| 德昌县| 出国| 万年县| 淳安县| 吉木萨尔县| 辽宁省| 灵寿县| 民县| 楚雄市| 普格县| 手机| 房产| 辽源市| 扬中市| 崇仁县| 长岛县| 怀化市| 高安市| 浙江省| 牙克石市| 武清区| 酒泉市| 大足县| 五莲县| 吉安县| 全椒县| 邢台县| 兖州市| 嘉义市| 桂平市| 曲沃县| 涞源县| 枞阳县| 大英县| 普格县| 沾益县| 嘉荫县| 吴江市| 镇平县| 咸丰县|