我有一个程序,可以写出' name1 name2得分和#39;进入带有PreparedStatement
并带有upsert的表。所以我很多时候执行这个语句,将它添加到批处理中。批量大小为100,当它完整时我做.executeBatch()
和con.commit()
(自动提交在开始时设置为false)。
问题是,在程序工作的前10分钟,它将数据更快地写入数据库muck,然后在工作数小时后(相同的工作在开始的1-2分钟内完成,在10-20分钟后完成)几个小时)。分析师说94%的时间花在SocketInputStream.read()
上:
那么我该怎样做才能防止这种可怕的减速?
答案 0 :(得分:1)
将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();