为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMMHUHU 2021-08-19 17:42:37
我有一个自动化脚本来测试数据库,它创建到数据库服务器的连接并验证表值。与此同时,应用程序变得非常缓慢。开放连接和应用程序性能之间有什么关系吗?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

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

  • CPU使用率。

  • 内存占用。

  • 输入/输出流量。

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

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

它应该处理大量 I/O 流量吗?原则上不会,除非驱动程序在进行一些轮询或在后台进行某些操作。

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


查看完整回答
反对 回复 2021-08-19
?
倚天杖

TA贡献1828条经验 获得超3个赞

当您使用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(....){}


查看完整回答
反对 回复 2021-08-19
?
慕森卡

TA贡献1806条经验 获得超8个赞

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

池会跟踪连接的使用/重用/多路复用,而无需频繁打开和关闭它们。这样数据库负载就变轻了。


查看完整回答
反对 回复 2021-08-19
  • 3 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信