【问题标题】:Long transactions block active connections in HikariCP长事务阻塞 HikariCP 中的活动连接
【发布时间】:2020-04-27 01:34:22
【问题描述】:

当 Java 服务 (HikariCP+JDBC+Oracle, pool=10) 有包含数据库操作和外部服务调用的大事务时,我遇到了问题,在运行此事务期间 Hikari 保留连接(至少通过 JMX 显示它) 直到交易完成。 由于服务调用导致事务很长(无法将其从事务中排除,我已经最小化超时)活动连接保留时间过长,它会阻塞所有服务。

线程在 getConnection() 上被阻塞。

这里的主要内容是活动连接仅在 Hikari 而不是在 Oracle 端,Oracle 将其显示为不活动。例如。 Hikari 正在浪费连接,因为实际上它对 DB 没有任何作用。

Hikari 中是否有任何配置可以解决此问题?或者也许一些模式如何避免它?

【问题讨论】:

  • 看看我之前的回答有没有帮助stackoverflow.com/questions/58917381/…
  • 感谢您的链接,但这是另一个故事。重新连接到数据库的成本很高,因此更喜欢使用静态连接池。接下来是解决不同的问题,你建议只是剪掉它,但我的问题是在不实际使用时重用它。
  • setMaxLifetime 标记为在 X 秒后不实际使用时重复使用

标签: oracle transactions microservices hikaricp


【解决方案1】:

在将 Hikari 更新到最新版本后,它得到了解决(有几个版本提到了线程问题的修复),另外为了安全起见,我们已经设置了 maxLifetime ,目前可以正常使用。

【讨论】:

    猜你喜欢
    • 2019-12-03
    • 2018-11-09
    • 1970-01-01
    • 2015-09-19
    • 2018-11-06
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    相关资源
    最近更新 更多