【问题标题】:Whats the best way to set the values of C3P0 parameters when it is in conjunction with Hibernate? [closed]与 Hibernate 结合使用时,设置 C3P0 参数值的最佳方法是什么? [关闭]
【发布时间】:2026-01-17 18:20:04
【问题描述】:

首先请注意:问题是关于参数值而不是配置方法。另外,我的问题是根据我的系统要求定制的。

我的系统将被 20 个并发请求的用户使用,我相信每个查询得到响应的最长时间是 300 秒。虽然我使用了 JMeter 并且应用程序工作正常,但我怀疑 idle_test_period 的值不应超过超时值,但在大多数在线教程中它们不是。我想知道以下配置是否足以满足我的要求。以及idle_test_period的值是否应该大于timeout?

 <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">100</property>
        <property name="hibernate.c3p0.timeout">300</property>
        <property name="hibernate.c3p0.max_statements">50</property>
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="current_session_context_class">thread</property>
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

大多数网站的配置都是一样的,例如:thisthis

【问题讨论】:

  • 请注意,反对者不一定是标记为重复的人。 @Jarrod OP 要求您审核。
  • 如果您正在寻找有关将值实际设置为什么而不是如何配置它们的指导,这在以前并不清楚。这是题外话:基于意见/过于广泛和(以前过于本地化)反正。 这里没有人能告诉你这些值应该是什么,这就是分析、负载测试和压力测试的用途。因受骗而关闭或因离题而关闭,相同的区别。
  • @JarrodRoberson 感谢您的评论,正如我在问题中提到的那样,我使用了 JMeter 并且应用程序完美运行;但是,根据提供的知名在线教程,我发现应该更改这些值。这就是我问这个问题的原因。我还解释了我的要求,以防回复者需要。

标签: java hibernate jpa configuration c3p0


【解决方案1】:

设置连接池大小并非易事。任何 RDBMS 都会施加最大并发连接限制,我看到您已经选择了 100 个连接的最大大小。

通常,根据 RDBMS 引擎、操作系统和硬件,每个 DB 节点(母机/从机)最多可能有 100-300 个并发连接。

因此,如果您打算对这个应用程序进行负载平衡,或者针对有限的数据库连接运行不同的应用程序,那么事情就会变得非常复杂。

我花了一些时间来寻找最佳的连接池大小调整策略 o 以下是我的发现:

The anatomy of Connection Pooling

FlexyPool, reactive connection pooling

Professional connection pool sizing

因此,我构建了一个名为 FlexyPool 的开源项目,它允许您:

  1. 监控连接池行为(连接租用时间、连接获取时间、重试次数、池大小增长)
  2. 让您可以使用按时间阈值递增的池策略找到合适的池大小

我希望它可以帮助您找到合适的池大小。

【讨论】:

  • 好的,感谢您的回答,我阅读了您的文章,似乎 FlexyPool 尚未最终确定,因此不适用于我的问题。您对我保持 idle_test_period 的值小于超时值的想法有何建议?
  • FlexyPool 尚未最终确定是什么意思?我们在生产系统中使用它。 idle_test_period 要求连接在物理关闭之前空闲这么长时间。它与 Tx 超时值无关。
  • 我明白了,虽然它仍在开发中。
  • 它与 Hibernate 一样最终确定,Hibernate 也在开发中,用于下一个版本。
最近更新 更多