Open jdbc与数据库服务器的连接会降低应用程序的性能吗?

时间:2018-08-29 11:25:53

标签: java jdbc database-performance

我有一个自动化脚本来测试数据库,该脚本创建与db服务器的连接并验证表值。同时,应用程序运行非常缓慢。开放连接与应用程序性能之间有什么关系吗?

3 个答案:

答案 0 :(得分:2)

使用完连接后,您需要通过调用其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 :(得分:1)

不一定。实际上,除非有合理依据,否则不希望打开的连接会降低应用程序的性能。

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

  • CPU使用率。
  • 内存占用。
  • I / O流量。

仅用于打开而不用于使用的JDBC连接是否会增加CPU使用率?原则上不可以,除非驱动程序在后台运行自己的某个线程。

它会占用很多内存吗?原则上不可以,因为JDBC API设计用于通过 cursors 来恢复数据(它不应只占用简单的工作缓冲区),除非驱动程序没有对使用过的udata进行正确的垃圾收集。

它会占用大量I / O流量吗?原则上不可以,除非驾驶员在后台进行轮询或其他操作。

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

答案 2 :(得分:0)

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

该池跟踪连接的使用/重用/复用,而无需经常打开和关闭它们。这样,数据库负载就减轻了。