2015-04-20 89 views
-2

我有一個程序(EOD批處理),它處理每日累計的會計職位並更新UPDT表。優化代碼以提高程序的性能

該程序是這樣的。

  1. 查詢獲取來自各個表的結果作爲加盟等的結果,並存儲在tempfile.txt
  2. 記錄的記錄逐個讀取從tempfile.txt和一些一系列的計算情況發生。
  3. 對於每個被讀取的記錄;在計算完成後,我們調用update_UPDT()方法,將計算值提交給數據庫中的UPDT表。

注意:我想提高程序的性能。
請提出一個更好的方法。 我有幾個計劃。

  1. 使用Xml而不是tempfile。 Xml會更輕。
  2. 而不是每個記錄逐一寫入數據庫,寫入某個臨時表或稱爲XML,然後一旦對所有記錄完成整個計算集合,就向數據庫執行批量發佈。

其他建議?
或者使用數組會更好?

回答

0

第一件事第一件事:措施

在開始思考解決方案之前,您需要對減慢速度有很好的想法。

  • 將類似VisualVM的分析器附加到您的流程中,並嘗試找出熱點。
  • Print GC details以更好地理解內存分配/清理。
  • 測量底層系統性能:CPU利用率,磁盤I/O和網絡流量。

一旦你掌握了所有的信息,你應該能夠確定你需要改進的地方。然後,只有到那時,是時候考慮改變什麼了。

這是唯一可靠的優化方法。

+0

@感謝Bizclop。首先會測量熱點來找到改進的地方。 – user3346282

+0

我測量了性能,看起來updateUPDT()方法命中將近12000次。因此每個12000條記錄都被逐一更新,這似乎是一個瓶頸。現在,我不是一個接一個寫所有的記錄,而是將它們寫入「BULKXML」。一旦所有記錄被插入到大容量xml中,我必須將其更新到我想通過存儲過程實現的UPDT表中。請幫我存儲過程。我是否需要在storedproc中編寫更新語句,或者是否應該使用存儲過程中的連接來更新xml值中的表值。 – user3346282