我按照INSERT
,DELETE
,INSERT
,DELETE
等顺序运行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.
}
抱歉,我没有代码。
任何想法为什么在每次下一次迭代时插入都会变慢?
答案 0 :(得分:0)
我不能确定没有代码,但我认为你有内存泄漏,所以额外的时间是由于垃圾收集。这可以解释为什么在没有循环的情况下多次运行相同的代码会更快。在启用GC日志记录的情况下运行程序(-XX:+ PrintGC),看看会发生什么。
为了消除数据库问题,您可能希望使用另一个(新)表进行测试,并使用truncate table替换delete,以防万一。