【问题标题】:Why does HikariCP recommend fixed size pool for better performance为什么 HikariCP 推荐固定大小的池以获得更好的性能
【发布时间】:2015-05-13 07:07:42
【问题描述】:

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

minimumIdle

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

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

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

那么以下哪个是最好的:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我建议您read this 页面并观看随附的视频。 Oracle 性能组演示了具有 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)。

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

      【讨论】:

      • 谢谢您,先生。它给了我清晰的想法..所以你建议我创建 200 个连接的固定大小的池..
      • 如果你觉得你需要运行 200 个连接,但是 100 个经常是空闲的,我建议你作为一个非固定大小的池运行(minimumIdle=100maximumPoolSize=200)。但是,我还建议您重新评估您是否真的需要最多 100 个连接。大多数查询都非常快,因此即使线程等待连接,它们通常也不会等待很长时间(毫秒)。
      • @brettw,此信息不一定正确。如果您有一个包含复杂查询的大型数据库,其中事务可能需要几秒钟,那么您的连接很容易达到饱和。
      猜你喜欢
      • 1970-01-01
      • 2016-04-08
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 1970-01-01
      相关资源
      最近更新 更多