2017-05-22 22 views
0

Oracle JDBC接続を使用しており、CallableStatementを使用してプロシージャを実行しています。resultset.next時間がかかります

procedureCall.executeUpdate(); // That took 149 milliseconds 
resultSet.next() // That took 5287 milliseconds 

クエリ実行時間はokです。しかし、私がresultSet.nextを実行すると、時間がかかります。

誰でもこのような現象が起こっている理由を教えてください。

EDIT

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

これら2つのステートメントの間にコード内にいくつかの操作があるとします。タイムスタンプ付きのログメッセージを追加してみてください。 resultset.next()の直前と直後に5287ミリ秒を測定する場合は、OracleのAWRレポートをチェックして、ボトルネックがどこにあるかを確認する必要があります。また、この操作をループで実行することもできます。これにより、AWRで測定可能なDBに実際の負荷が生成されます。

+0

間に操作はありません。 –

+0

executeUpdate()で更新されるレコードの数はいくつですか?これら2つの前後にコードラインを追加してください。 – Galcoholic

+0

こんにちは、コードサンプルを追加しました。 –

関連する問題