Hikari连接池,连接不可用

Hikari connection pool, Connection is not available

是的,经过多年的设计分析和思考同样的问题.. 我知道这是设计问题。正如评论员所说。为 Hikari 提供数以千计的连接并不意味着数据库将处理数以千计的连接请求。 因此必须更新设计以优化数据库连接,并且线程必须等待下一个可用连接。如果您的线程没有及时完成并且仍在几分钟,几小时内工作..那么您正在做什么来为其他线程提供数千个连接。这是错误的!完全错了! 为线程提供数千个连接并不意味着一切都已解决。如果你认为我们有巨大的表现 :) 那是失败成功。

我有线程系统。 7000 个线程处理一些复杂的任务。

我们有 java 解决方案:spring、用于持久性的休眠、log4j2、用于数据库访问的 hikari 连接池(它由 bean 加载和管理)

我之前将 Hikari 连接池大小设置为线程大小的 %30。但我们得到了这个 连接不可用,请求在 30025 毫秒后超时... 错误。发生此错误后,我无法修复停止的服务。我尝试将数据库池大小增加到 8000。

因此线程大小为:7000,数据库池大小为:8000..

但是我收到了这个意外错误。发生了什么?有人可以解释为什么数据库连接不支持此服务吗?

我读到大多数用户 运行 他们的服务具有最小池大小示例 20.000 线程但只有 20 db 池大小。怎么办?你能解释一下吗,我的服务设计问题是什么。

是的,我有 @Transactional 注释,并且在该复杂任务中的许多功能上需要新的。那里有问题吗?重点是这个?

你能帮我看看主要问题是什么吗?

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC 

Connection at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)

Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection

Caused by: java.sql.SQLTransientConnectionException: springHikariCP - Connection is not available, request timed out after 30025ms.

Caused by: java.sql.SQLException: Network error IOException: Address already in use: connect

Caused by: java.net.BindException: Address already in use: connect

仅仅因为您允许程序使用数以千计的同时连接到数据库,并不意味着数据库可以处理它们。这就是为什么增加连接会在一段时间后适得其反(在数十个或可能数百个连接中)。

您可以配置等待空闲连接的超时时间(在您的示例中为 30 秒),但这并不能改变这样一个事实,即如果您尝试在规模不佳的服务器上做很多事情,您会有麻烦的。

获得更大的数据库(或横向扩展),使用更少的线程或尝试在您可以优化的数据库中找到性能热点。