设为首页 加入收藏

TOP

Java Jdbc减少与Oracle之间交互提升批量处理性能,到底该如何优化才好?(二)
2014-11-24 12:02:32 来源: 作者: 【 】 浏览:149
Tags:Java Jdbc 减少 Oracle 之间 交互 提升 批量 处理 性能 到底 如何 优化
t(3+j*4, 1);
pstmt.setInt(4+j*4, 1);
}
// System.out.println (" Statement Execute Batch Value " +((OraclePreparedStatement)pstmt).getExecuteBatch());
startTime = System.currentTimeMillis();
pstmt.execute();
stopTime = System.currentTimeMillis();
System.out.println("拼接15000条INSERT SQL 第一次运行的耗时 Elapsed time was " + (stopTime - startTime) + " miliseconds.");
startTime = System.currentTimeMillis();
pstmt.execute();
stopTime = System.currentTimeMillis();
System.out.println("拼接15000条INSERT SQL 第二次运行的耗时 Elapsed time was " + (stopTime - startTime) + " miliseconds.");
cnn1.createStatement().execute("alter system flush shared_pool");
System.out.print("\n alter system flush shared_pool 已刷新共享池,避免SQL游标缓存 影响第二次测试 \n");
startTime = System.currentTimeMillis();
int batch=1000;
PreparedStatement pstmt2 = cnn1.prepareStatement("insert into insertit values( , , , )");
((OraclePreparedStatement)pstmt2).setExecuteBatch(batch);
for (int z=0;z<=15000;z++)
{
pstmt2.setInt(1, z);
pstmt2.setInt(2, z);
pstmt2.setInt(3, z);
pstmt2.setInt(4, z);
pstmt2.executeUpdate();
}
((OraclePreparedStatement)pstmt2).sendBatch();
cnn1.commit();
stopTime = System.currentTimeMillis();
System.out.println("batch size= "+batch+" 常规循环 15000 次 INSERT SQL 第一次运行的耗时 Elapsed time was " + (stopTime - startTime) + " miliseconds.");
startTime = System.currentTimeMillis();
PreparedStatement pstmt3 = cnn1.prepareStatement("insert into insertit values( , , , )");
((OraclePreparedStatement)pstmt3).setExecuteBatch(batch);
for (int z=0;z<=15000;z++)
{
pstmt3.setInt(1, z);
pstmt3.setInt(2, z);
pstmt3.setInt(3, z);
pstmt3.setInt(4, z);
pstmt3.executeUpdate();
}
((OraclePreparedStatement)pstmt3).sendBatch();
cnn1.commit();
stopTime = System.currentTimeMillis();
System.out.println("batch size= "+batch+" 常规循环 15000 次 INSERT SQL 第二次运行的耗时 Elapsed time was " + (stopTime - startTime) + " miliseconds.");
String insert = "insert into insertit values ( , , , )";
PreparedStatement pstmt4 = cnn1.prepareStatement(insert);
startTime = System.currentTimeMillis();
for (int u=0;u<=15000;u++)
{
pstmt4.setInt(1, u);
pstmt4.setInt(2, u);
pstmt4.setInt(3, u);
pstmt4.setInt(4, u);
pstmt4.addBatch();
}
pstmt4.executeBatch();
cnn1.commit();
stopTime = System.currentTimeMillis();
System.out.println(" BATCH update 第一次运行的耗时 Elapsed time was " + (stopTime - startTime) + " miliseconds.");
}
}
拼接SQL和PreparedStatement.setExecuteBatch均执行2次,第一次没有游标缓存,第二次有游标缓存。PreparedStatement+addBatch()+executeBatch()只执行一次。
以下为JAVA程序端的测试结果:
alter system flush shared_pool 已刷新共享池,避免SQL游标缓存 影响第一次测试
拼接15000条INSERT SQL 第一次运行的耗时 Elapsed time was 441299 miliseconds.
拼接15000条INSERT SQL 第二次运行的耗时 Elapsed time was 5938 miliseconds.
alter system flush shared_pool 已刷新共享池,避免SQL游标缓存 影响第二次测试
batch size= 1000 常规循环 1500
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇单独hibernate 生成表 下一篇使用Comparator进行两个Object的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: