Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除后的JDBC插入会降低性能_Java_Oracle_Jdbc - Fatal编程技术网

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

Java 删除后的JDBC插入会降低性能,java,oracle,jdbc,Java,Oracle,Jdbc,我按顺序运行JDBC查询,INSERT、DELETE、INSERT、DELETE等。我在1000个批次中插入一百万条记录,然后在单个查询中删除这一百万条记录,然后再次插入。在这种情况下,我只对插入性能感兴趣 当我在循环中运行,即10次迭代时,在第一次迭代时,性能最快,即11秒,然后在每次下一次迭代后,insert的性能比上一次慢几秒。但是,当我不在循环中运行它时,插入时间非常相似 知道为什么吗 for(number of iterations){ //process insert o

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

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

知道为什么吗

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.
}
对不起,我身上没有密码


你知道为什么在下一次迭代中插入会变慢吗?

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


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

是否在一个事务中运行它?否,我使用一个PreparedStatement对象将其插入1000 x 1000。随着批量大小的不同,每次迭代的时间也会增加。单笔交易也有一百万。是远程数据库还是本地数据库?表上有索引吗?你能试着用TRUNCATE替换DELETE吗?它是远程数据库,不确定索引。我将尝试TRUNCATE并查看它是否有任何更改。不幸的是,无法使用TRUNCATE对其进行测试,因为数据库中已有其他数据,我无法删除。