删除后的JDBC插入会降低性能

时间:2015-05-10 20:04:24

标签: java oracle jdbc

我按照INSERTDELETEINSERTDELETE等顺序运行JDBC查询。我在1000个批次中插入了一百万条记录,然后删除了那些百万条记录单个查询然后再次插入。在这种情况下,我只对插入性能感兴趣。

当我在10次迭代的循环中运行时,在第1次迭代时,性能最快,即11秒,然后在每次下一次迭代之后,插入的性能比前一次慢几秒。但是,当我不在循环中运行时,插入时间非常相似。

知道为什么吗?

for(number of iterations){
      //process insert of million records here, batch size is 1000
      //prepared statement is used and clearBatch is called after every 1000     
      //inserts,
      //at the end prepared statement is closed and connection.commit() is  
      //called

      //Thread.sleep(1000) called here
      //everything is inserted now in the DB so delete what has been inserted  
      //in single query. connection.commit() called again after delete.

      //Thread.sleep(1000) and repeat the same actions until loop finishes.
}

抱歉,我没有代码。

任何想法为什么在每次下一次迭代时插入都会变慢?

1 个答案:

答案 0 :(得分:0)

我不能确定没有代码,但我认为你有内存泄漏,所以额外的时间是由于垃圾收集。这可以解释为什么在没有循环的情况下多次运行相同的代码会更快。在启用GC日志记录的情况下运行程序(-XX:+ PrintGC),看看会发生什么。

为了消除数据库问题,您可能希望使用另一个(新)表进行测试,并使用truncate table替换delete,以防万一。