【问题标题】:HPC + Oracle Connections = Recipe for disaster?HPC + Oracle 连接 = 灾难的秘诀?
【发布时间】:2011-10-21 12:46:46
【问题描述】:

我正在 HPC(高性能计算)集群上运行 Java 应用程序。该应用程序通过与 Oracle 11.2.0 数据库建立 JDBC 瘦连接。鉴于这是在集群上,同时建立和维护大量连接(尽管与数据库的实际交互相对较少)。潜在的最大并发连接数将是 4500(尽管它永远不会达到那么高)。

应用程序运行良好,直到第 125 个并行连接失败并出现以下错误。此错误消息在后续连接尝试中仍然存在:

java.sql.SQLException: No more data to read from socket
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:209)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1129)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1080)
at oracle.jdbc.driver.T4C8TTIpro.receive(T4C8TTIpro.java:131)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:902)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:269)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:454)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:802)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)

我是否认为这与数据库允许的连接数限制有关?还是这与数据库负载有关?

有没有人知道我可以如何解决这个问题,以便我能够进行更多的并行连接?

非常感谢。

【问题讨论】:

    标签: java oracle jdbc connection hpc


    【解决方案1】:

    可能只是您的连接池,如果您使用的是一个,我希望 Oracle 可以处理超过 125 个。即您选择的方法的人为上限为 125,这很可能是默认情况下而不是您自己强加的。

    您是否使用诸如 Spring 之类的东西来管理您的连接,例如通过 Apache Commons DBCP 库?

    另外,您实际上是否一直/需要 4500 个连接,或者您是否有 4500 个线程,每个线程都需要突发的数据库连接?如果是后者,例如 500 个连接池可能就足够了。

    编辑:当然,它可能是一个 Oracle 配置正在打击你;看看这个早先的 SO 问题:

    How to check the maximum number of allowed connections to an Oracle database?

    【讨论】:

    • 我目前没有使用连接池。鉴于我是并行执行的,你知道我将如何创建一个每个应用程序都可以访问的吗?
    • 实际上,我不确定您将如何在 应用程序 之间共享一个。您所说的应用程序绝对是指不同的应用程序,而不是一个应用程序中的不同线程......?
    • 是的,应用程序正在多个集群节点上运行。它们本质上是同一应用程序的不同实例。
    • 好的;首先,我会看看您是否可以简单地让 Oracle 直接支持您需要的连接数,这是最简单的架构选项。我编辑了我的答案,以将您指向一个相关的早期帖子(不是我的,我必须添加)。如果这被证明无法实现,您可能需要在您的应用程序和数据库之间实现某种类型的数据库连接代理,但这是一个相当大的一步,它本身也带来了一些相当大的挑战。
    • 原来被击中的最大进程数。自从提高了这一点,一切都很好。
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2018-06-02
    相关资源
    最近更新 更多