2010-08-09 113 views
6

我一直在試圖使用spring 3.0 SimpleJdbcTemplate,並且需要5分鐘來插入1500條記錄,而這需要我幾秒鐘的時間。使用直接JDBC插入。不知道我做錯了什麼。Spring JDBC vs JDBC

+1

你可以通過你的代碼嗎? – dierre 2010-08-09 18:09:23

+6

這不是一個問題,也沒有提供任何代碼供我們仔細檢查,您如何期望我們能夠幫助您?請考慮提供更多細節。 – Andrew 2010-08-09 18:10:04

+0

不是說應該花費5分鐘才能插入,但是當您在「直接jdbc」之上使用任何框架時會有延遲。發佈您的查詢/代碼,以便我們可以看到發生了什麼。 – 2010-08-09 18:33:23

回答

6

如果您正在構建批處理考慮使用Spring批處理 - JdbcBatchItemWriter以及適當的塊大小設置,那將在不到一秒鐘的時間內加載這1500條記錄。

1

有些事情值得一試:

  • 開銷可能會在應用程序級別由Spring管理事務。看看你正在使用什麼樣的事務管理器(找一個名字爲transactionManager的bean)。如果您使用JTA,那可能就是您的問題所在。由於JDBC速度很快,瓶頸似乎不是數據庫。
  • 根據您的應用程序如何使用該事務,它可能會在完成所有1500個請求和提交之前將所有內容都放在內存中。你是否看到內存使用的巨大差異(Spring應該高得多)?
  • 在任何一種情況下您使用的是哪種數據庫連接池?

快速的方法來分析您的應用程序:

獲取pid - "jps -l"

內存:jmap -histo PID(檢查是否有某種形式的內存泄漏)

檢查什麼引擎蓋下回事:jstack PID (尋找緩慢或遞歸的方法調用)

-2

如何使用

jdbcTemplate.batchUpdate(new String[]{sql});