首页 文章

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

提问于
浏览
7

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

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

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

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

那么以下哪项是最好的:

  • 使用 fixed size 创建连接池 . 即200

OR

  • 通过将 minimumIdle 设置为100并将 maximumPoolSize 设置为200来创建连接池 .

为什么HikariCP不推荐第二点?我认为第二个对我来说是最好的 .

1 回答

  • 9

    我建议你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) .

    更新:直接回答有关固定池大小调整的问题 . 您可能会从应用程序中获得最佳性能,其中最大连接数在您的数据库可以处理的"knee"或"peak"性能上正确 . 这可能是一个很小的数字 . 如果你有许多应用程序所做的"spike demand",那么在峰值瞬间尝试启动新连接以增加池会适得其反(在服务器上产生更多负载) . 一个小而恒定的池将为您提供可预测的性能 .

相关问题