打开与数据库服务器的jdbc连接是否会降低应用程序的性能?

问题描述 投票:1回答:3

我有一个自动化脚本来测试数据库,它创建与数据库服务器的连接并验证表值。同时应用程序非常慢。开放连接和应用程序性能之间是否有任何关系?

java jdbc database-performance
3个回答
2
投票

完成使用Connection后,需要通过调用close()方法显式关闭它,以释放连接可能持有的任何其他数据库资源(游标,句柄等)。

   Connection conn = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    try {
        // Do stuff
        ...

    } catch (SQLException ex) {
        // Exception handling stuff
        ...
    } finally {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) { /* ignored */}
        }
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException e) { /* ignored */}
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) { /* ignored */}
        }
    }

使用后关闭数据库/资源​​对象总是更好。最好关闭finally块中的连接,结果集和语句对象。

在Java7之前,需要使用finally块关闭所有这些资源。如果您使用的是Java 7,那么为了关闭资源,您可以使用try-with-resources,如下所示。

try(Connection con = getConnection(url, username, password, "org.postgresql.Driver");
    Statement stmt = con.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
) {

//statements
}catch(....){}

1
投票

不必要。事实上,除非特别合理,否则开放连接不会降低应用程序的性能。

性能可能受三个因素的影响:

  • CPU使用率。
  • 记忆占领。
  • E / O traffi。

JDBC连接只是用于打开而不是用于增加CPU使用率吗?原则上不行,除非驱动程序在后台运行一些自己的线程。

它应该占用大量内存吗?原则上不行,因为JDBC API旨在恢复数据(它不应占用多于一个简单的工作缓冲区) - 除非驱动程序没有对使用过的udata进行正确的垃圾收集。

它应该做很多I / O流量吗?原则上不,除非司机在后台进行一些轮询或其他事情。

因此,正如您所看到的,答案是它取决于JCBC驱动程序的实现。一旦不使用就关闭连接是在服务器端释放资源的一种很好的做法,但通常在客户端并不重要。


0
投票

如果您经常打开和关闭连接,我建议使用JDBC连接池,任何JDBC连接池都可以。

池跟踪连接的使用/重用/多路复用,而不经常打开和关闭它们。这样,数据库负载变得更轻。

© www.soinside.com 2019 - 2024. All rights reserved.