【问题标题】:JDBC programms running long time performance issueJDBC 程序长时间运行性能问题
【发布时间】:2012-06-18 18:39:40
【问题描述】:

我的程序在Oracle查询性能上有问题,我相信SQL有很好的性能,因为它在SQLPlus中返回很快。

但是当我的程序运行了很长时间,比如 1 周,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
     }
 }

在我的例子中,args 总是为 null,所以它只是将一个查询 sql 传递给这个查询方法。在程序长时间运行后,这种方式可能会减慢数据库查询的速度吗?或者我应该改用语句,或者只是用“?”传递参数在 SQL 中?如何找出问题的根本原因?谢谢。

【问题讨论】:

  • 性能下降可能与您的代码没有释放资源有关(例如:关闭连接)。
  • @Alfabravo,感谢您的评论。但是我已经在finally块中一一关闭了连接资源,你的意思是,还有其他地方不能关闭连接或者释放资源吗?
  • 是的。另一个选项是构建查询的方式。可以给我们看看吗?
  • 您是否监控过 Oracle 的会话?连接总是关闭吗?当系统变慢时,在v$session 上进行选择,看看有多少活动会话。
  • @Alfabravo,对不起,SQL 包含了太多的业务信息,我不能在这里发布,但我们转向查询计划。应该没问题,我发现一旦数据库空闲(周末,没有人使用系统),它会运行得非常快。不确定这是否意味着什么。

标签: linux performance oracle jdbc java


【解决方案1】:

jdbc 缓存可能有问题...oracle spec 尝试将其关闭。 或尝试多次重新初始化驱动程序(每天一次)

【讨论】:

  • 感谢您的回答,如何用纯 jdbc 将其关闭?我们正在使用一个简单的 JDBC 独立应用程序,没有 Web 容器来维护数据源。你重新初始化驱动程序是什么意思?怎么做?您的意思是重新加载 Oracle 驱动程序类?
  • 我遇到了同样的问题。经过一个半星期的搜索,我发现 Oracle jdbc 数据源已打开缓存。禁用后,此延迟(我正在运行一个选择查询百万次,延迟出现在十万次后)消失并且查询在恒定时间内运行。
【解决方案2】:

您首先需要查看可帮助您了解您花费最多时间的数据,在性能调整时猜测不是一种选择。

因此,我建议您获取可靠的数据,以准确指出存在问题的层(JAVA 或 DB)。

为此,我建议在问题最明显时查看 AWR 和 ASH 报告。还可以在 JVM 上收集数据(您可以使用 JConsole 和/或 JVisualVM)。

第一次诊断性能不佳时,我总是使用“USE”方法,即利用率、饱和度和错误。

首先,在日志中查找错误。

然后寻找任何变得饱和的资源(CPU、内存等...)

最后看看每个资源的利用率,有一个客户端服务器布局会让这更容易,如果不是这种情况,你需要深入到进程级别以了解它是 Java 还是 DB。

一旦您收集了这些数据,您就可以相应地指导您的调整工作。采用这种方法只会浪费时间,有时甚至会掩盖问题或引发新问题。

您可以稍后带着这些数据回来,我们可以看看!

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 2023-03-10
    • 2017-10-22
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多