resultset.next需要很长时间

时间:2017-05-22 11:43:54

标签: oracle jdbc plsql oracle11g

我正在使用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()){} 还是花时间。

1 个答案:

答案 0 :(得分:0)

我认为在这两个语句之间代码中还有其他一些操作。尝试添加带有时间戳的日志消息。如果在resultset.next()之前和之后测量5287毫秒,那么您应该检查Oracle的AWR报告,并查看瓶颈在哪里。此外,您可以循环执行此操作,以便在DB上生成实际负载,这将在AWR中进行测量。