【问题标题】:Oracle (godror) open connections exceed the maximum allowedOracle (godror) 打开的连接数超过了允许的最大值
【发布时间】:2020-10-27 11:43:25
【问题描述】:

我正在使用 go 1.13 和 godror(以前的 goracle)包作为驱动程序来访问我的 oracle 数据库。我遵循推荐的预防措施,并建立我的连接安全和理智。然而,在某些情况下,我发现我的go app、我的主机 CentOS 和我的oracle 数据库有一些奇怪的不当行为。

我已将我的连接数设置为不超过 50,并通过其正常使用来观察它。但是,在数据库忙于制作一些昂贵的报告的某些情况下,我看到这个数字超出了预设的最大值。比如打开的连接数达到10000!

这是我的连接字符串:

user=user password=secret connectString=oracle_host:1521/testdb configDir=
connectionClass= enableEvents=0 heterogeneousPool=0 libDir= newPassword= poolIncrement=1
poolMaxSessions=50 poolMinSessions=0 poolSessionMaxLifetime=1h0m0s poolSessionTimeout=42s
poolWaitTimeout=0s prelim=0 standaloneConnection=0 sysasm=0 sysdba=0 sysoper=0
timezone=local

辅助信息:我在一个包中打开我的数据库连接一次并打开它,然后我们在应用程序的其他地方使用这个实例。可以看代码in this gist

参考资料:

【问题讨论】:

    标签: oracle go


    【解决方案1】:

    我建议先设置db.SetMaxIdleConns(0),这样您就只使用Oracle 池,而不是同时使用Oracle 池和数据库/sql 池。

    【讨论】:

    • 谢谢克里斯托弗,您的建议也在文档中得到了回应。我应用它或尝试将我的 go 升级到 > 1.14。如果有任何好的立场,我会更新我的问题。
    • 更新:我根据您的建议做了一些更改。我仍然遇到打开连接数超过限制的情况,比如50,但是这次它没有达到8000及以上。此外,它不会去隔间并在一分钟内关闭额外的连接。我应该认为这个问题已经解决了吗?
    • 如果您正在更改某些状态,额外的连接可能是暂时的??您可以在Github 上打开一个问题,但需要提供一个可运行的程序。
    猜你喜欢
    • 2020-07-01
    • 2014-09-23
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2018-05-15
    • 2015-05-20
    相关资源
    最近更新 更多