Spring Boot连接池配置的最佳实践

12
我正在为Spring Boot应用程序和Postgres数据库配置JDBC连接池,使用HikariCP连接池,并尝试找到最佳的配置设置实践,不幸的是,在网络上关于这个主题的信息并不多。
我正在为不同的设置准备自己的性能测试,但我会感激任何帮助。应用节点的平均吞吐量约为每秒20次请求。
我最感兴趣的是这些属性的最优值:
    minimumIdle: ?
    maximumPoolSize: ?
    idleTimeout: ?
    maxLifetime: ?
    connectionTimeout: ?

特别是想知道maximumPoolSize的最优值。对于连接池设置,还有很多其他选项可用,希望能得到关于它们对应用程序性能影响的任何建议。


2
你不会得到这个问题的明确答案。连接池的调优非常依赖于你的使用情况(查询)、数据、并发访问等因素。最终,这一切都归结为数据库的吞吐量。请参阅一些基本提示 - gusto2
3
HikariCP 有非常好的文档和建议,详情请查看 https://github.com/brettwooldridge/HikariCP。 - Kayaman
@Kayaman 谢谢,里面有一些有趣的信息。 - Aliaksei Stadnik
你应该添加更多的信息,如DB oracle/mysql、Web容器等。 - user7294900
@user7294900 添加Postgres数据库,谢谢。 - Aliaksei Stadnik
1个回答

17
@aliaksei-stadnik 20个请求/秒,在整个方案中算是相当低的。因此,我不会过于担心池调优;更重要的是专注于查询性能。您的查询时间越短,您就可以使用更少的连接处理更多的请求。
我们总是建议将HikariCP作为固定大小的池来运行,以获得最佳性能(保留minimumIdleidleTimeout未设置)。maximumPoolSize可能是您需要调整的关键数字,如上面提到的链接所说,它主要取决于您的数据库服务器具有的CPU核数。
平均查询时间为2ms时,甚至单个连接也可以处理约500个请求/秒,而平均查询时间为10ms则会产生每个连接约100个请求/秒。但是,代价是单个请求可能需要等待一秒钟才能被服务。在这种情况下,额外的连接将有助于减少请求的排队时间。

问题在于我的查询语句非常复杂,需要大约500-600毫秒才能执行,所以如果连接池中的连接数较少(默认为10),请求将等待约7-8秒钟才能获取到连接。另一方面,如果连接数太多,数据库的CPU将会崩溃。这就是我试图寻找最佳解决方案的基本原因。 - Aliaksei Stadnik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接