我的程序在oracle查询性能方面有问题,我相信sql有很好的性能,因为它在sqlplus中返回很快。
但是当我的程序运行了很长一段时间,比如一周,sql查询(使用jdbc)就会变慢(在我的日志中,查询时间比我最初启动程序时长得多)。当我重新启动程序时,查询性能恢复正常。
我认为我使用preparedstatement的方式可能有问题,因为我使用的sql不使用占位符“?”完全。只是一个复杂的选择查询。
查询过程由util类完成。以下是构建查询的相关代码:

public List<String[]> query(String sql, String[] args) {
    Connection conn = null;
    conn = openConnection();
    conn.setAutocommit(true);
    ....
    PreparedStatement preStatm = null;
    ResultSet rs = null;
    ....//set preparedstatment arg code
    rs = preStatm.executeQuery();
      ....
    finally{
           //close rs
           //close prestatm
           //close connection
     }
 }

在我的例子中,参数总是空的,所以它只向这个查询方法传递一个查询sql。在程序长时间运行后,这种方式是否可能减慢数据库查询的速度?或者我应该改用语句,或者只是用“?”传递参数。在SQL中?我怎样才能找出问题的根源?谢谢。

最佳答案

JDBC缓存可能有问题…oracle spec
试着关掉它。
或者试着控制司机几次(每天一次)

09-10 07:58
查看更多