【发布时间】:2019-11-20 11:01:04
【问题描述】:
我想插入超过一百万条记录,我正在使用下面的代码 sn-p 来做同样的事情。
final int batchSize = 5000;
int count = 0;
int rows = 2000000;
try {
con = getConnection();
String psBatchquery = "insert into SYSTEM.Employee (id, name) values (?,?)";
batchPs = con.prepareStatement(psBatchquery);
psBatchstart = System.currentTimeMillis();
for (int i = 0; i < rows; i++) {
batchPs.setInt(1, i);
batchPs.setString(2, "Name" + i);
batchPs.addBatch();
if (++count % batchSize == 0) {
//the reason I added below try catch is because I do not want to stop execution of other records if there is any error record.
try {
batchPs.executeBatch();
} catch (BatchUpdateException a) {
a.printStackTrace();
}
}
}
batchPs.executeBatch();
} catch (BatchUpdateException a) {
a.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
使用上述参数大约需要 - 212349 毫秒。
1) 还可以做些什么来提高性能? 2)什么应该是最佳batchSize?如果我将 batchSize 减少到 100,则花费的时间会更多 3)我没有明确承诺,因为我不想回滚非错误记录。将 autocommit 设置为 false 并在最后一批执行后手动提交是否有助于减少执行时间? 4) 来自https://help.sap.com/viewer/0eec0d68141541d1b07893a39944924e/2.0.02/en-US/109397c2206a4ab2a5386d494f4cf75e.html 的参数 splitBatchCommands 是否有助于提高性能?
【问题讨论】:
-
您是否考虑过使用SAP HANA SQL IMPORT FROM Statement 而不是纯JDBC?
标签: insert sap bulkinsert hana