为什么HikariCP建议使用固定大小的池以获得更好的性能

时间:2015-03-11 13:12:02

标签: java sql-server database connection-pooling hikaricp

根据HikariCP的文档,他们提到创建固定大小的池以获得更好的性能。

  

minimumIdle

     

此属性控制HikariCP尝试在池中维护的最小空闲连接数。如果空闲连接低于此值,HikariCP将尽最大努力快速有效地添加其他连接。但是,对于最高性能以及对峰值需求的响应,我们建议不要设置此值,而是允许HikariCP充当固定大小的连接池。默认值:与maximumPoolSize

相同

我的应用程序通常需要100个连接,并且仅在少数情况下才能达到200个连接。

如果我创建一个200连接固定大小的池,大多数时候100个连接将是空闲的。

以下哪项是最好的:

  1. 使用固定大小创建连接池。即200
    1. 通过将minimumIdle设置为100并将maximumPoolSize设置为200来创建连接池。
    2. 为什么HikariCP不推荐第二点?我认为第二个对我来说是最好的。

2 个答案:

答案 0 :(得分:16)

我建议您read this页面观看附加视频。 Oracle Performance Group演示了具有96连接池的应用程序如何轻松处理10,000个前端用户和20,000个每秒事务。

PostgreSQL建议使用以下公式:

connections = ((core_count * 2) + effective_spindle_count)

其中core_count是CPU核心,effective_spindle_count是RAID中的磁盘数。对于许多服务器,此公式将导致最大连接数为10-20的连接池。

即使是100个连接,您的数据库也会严重超饱。你有50个CPU核心吗?如果你的驱动器是旋转盘而不是SSD,那么头部一次只能在一个地方,除非整个数据集在内存中,否则无法一次为这么多请求服务(100-200)。

更新:直接回答有关固定池大小调整的问题。您可能会从应用程序中获得最佳性能,其中最大连接数在您的数据库可以处理的“拐点”或“峰值”性能上变为正确。这可能是一个很小的数字。如果您有许多应用程序的“尖峰需求”,那么尝试在峰值瞬间启动新连接以增加池会适得其反(在服务器上创建更多负载)。一个小的,恒定的池将为您提供可预测的性能。

答案 1 :(得分:0)

这实际上取决于运行长时间运行和短期运行的事务的应用程序行为。有时候,我觉得如果要响应客户端同步方式,最好保留一些空闲连接到池中。