Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 PostgreSQL executeBatch()会随着时间的推移而变慢_Java_Sql_Postgresql_Jdbc - Fatal编程技术网

Java PostgreSQL executeBatch()会随着时间的推移而变慢

Java PostgreSQL executeBatch()会随着时间的推移而变慢,java,sql,postgresql,jdbc,Java,Sql,Postgresql,Jdbc,我有一个程序,它使用PreparedStatement和upsert将类似“name1 name2 score”的行写入表中。所以我经常执行这个语句,将它添加到批处理中。批量大小为100,当它已满时,我会执行.executeBatch()和con.commit()(自动提交在开始时设置为false) 问题是,在程序运行的前10分钟,它将数据写入数据库muck的速度更快,然后在工作数小时后(相同的工作在启动时在1-2分钟内完成,在数小时后在10-20分钟内完成)。探查器说它94%的时间花在Sock

我有一个程序,它使用
PreparedStatement
和upsert将类似“name1 name2 score”的行写入表中。所以我经常执行这个语句,将它添加到批处理中。批量大小为100,当它已满时,我会执行
.executeBatch()
con.commit()
(自动提交在开始时设置为false)

问题是,在程序运行的前10分钟,它将数据写入数据库muck的速度更快,然后在工作数小时后(相同的工作在启动时在1-2分钟内完成,在数小时后在10-20分钟内完成)。探查器说它94%的时间花在
SocketInputStream.read()


那么,我能做些什么来防止这种可怕的减速呢?

将autoCommit设为false,并使用如下准备好的语句:

con.setAutoCommit(false);  // The connection
PreparedStatement prepStmt = con.prepareStatement("INSERT INTO table (val1,val2) VALUES (?,?)");

for all values:
  prepStmt.setString(1,val1);
  prepStmt.setString(2,val2);
  prepStmt.addBatch();    

prepStmt.executeBatch(); 
conn.commit(); 
细节?PostgreSQL中没有“upsert”,那么您使用的是什么语句呢?在哪些PostgreSQL和PgJDBC版本上?在开始此过程之前,表是否为空,即它是否快速增长?如果是这样,经济放缓是正常的。