6

我一直在尝试使用 spring 3.0 SimpleJdbcTemplate,插入 1500 条记录需要 5 分钟,而我需要几秒钟。使用直接 JDBC 插入。不知道我做错了什么。

4

3 回答 3

6

如果您正在构建批处理,请考虑使用 Spring 批处理 -JdbcBatchItemWriter使用适当的块大小设置,这将在不到一秒的时间内加载这 1500 条记录。

于 2010-08-13T11:59:28.043 回答
1

一些值得检查的事情:

  • 开销可能在 Spring 在应用程序级别管理的事务上。查看您正在使用哪种事务管理器(查找具有 name 的 bean transactionManager)。如果您使用的是 JTA,那可能就是您的问题所在。由于 JDBC 速度很快,因此瓶颈似乎不是数据库。
  • 根据您的应用程序使用该事务的方式,它可能会在完成所有 1500 个请求和提交之前将所有内容保存在内存中。您是否看到内存使用量有很大差异(Spring 应该高很多)?
  • 在这两种情况下,您使用的是哪种数据库连接池?

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

获取pid - "jps -l"

内存:(jmap -histo PID检查是否存在某种形式的内存泄漏)

检查引擎盖下发生了什么:(jstack PID寻找缓慢或递归的方法调用)

于 2010-08-15T07:45:12.783 回答
-2

怎么用

jdbcTemplate.batchUpdate(new String[]{sql}); 
于 2015-03-31T23:20:02.573 回答