我正在使用Oracle JDBC连接并使用CallableStatement执行过程。
procedureCall.executeUpdate(); // That took 149 milliseconds
resultSet.next() // That took 5287 milliseconds
查询执行时间正常。但是当我做resultSet.next时,它需要很长时间。
任何人都可以告诉我们为什么会发生这种行为。
修改
try (CallableStatement procedureCall = connection.prepareCall(PROC_NAME)) {
procedureCall.setLong("param",value);
procedureCall.registerOutParameter("param1",OracleTypes.CURSOR)
procedureCall.registerOutParameter("param2",OracleTypes.CURSOR)
procedureCall.executeUpdate();
resultSet = (ResultSet) procedureCall.getObject("param1");
while(resultset.next()){
}
resultSet.close();
resultSet = (ResultSet) procedureCall.getObject("param2");
while(resultset.next()){
}
resultSet.close();
}catch(SQLException e){
}finally {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException ex) { }
}
}
解决方法
还尝试了resultset.setFetchsize(2);
和if(resultset.next()){}
还是花时间。
答案 0 :(得分:0)
我认为在这两个语句之间代码中还有其他一些操作。尝试添加带有时间戳的日志消息。如果在resultset.next()
之前和之后测量5287毫秒,那么您应该检查Oracle的AWR报告,并查看瓶颈在哪里。此外,您可以循环执行此操作,以便在DB上生成实际负载,这将在AWR中进行测量。