27

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

最小空闲

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

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

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

那么以下哪个是最好的:

  1. 创建固定大小的连接池。即200

或者

  1. minimumIdle通过设置为 100 和maximumPoolSize200创建连接池。

为什么HikariCP不推荐第二点?我认为第二个最适合我的情况。

4

2 回答 2

35

我建议您阅读此页面并观看随附的视频。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)。

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

于 2015-03-11T13:57:05.537 回答
1

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

于 2019-05-15T05:07:50.837 回答