【问题标题】:Hibernate C3P0 settings performance issuesHibernate C3P0 设置性能问题
【发布时间】:2014-04-26 02:46:52
【问题描述】:

由于我们向应用程序添加了 C3P0 连接池,因此性能变得更慢。它是 Oracle 10g 数据库、Hibernate 3.1.3 和 C3P0 0.9.0.4。 WebSphere 应用程序服务器。我对这件事很陌生,所以我不明白一切。这种配置是否会降低应用程序的性能?如果是我应该改变什么?

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>     
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.max_size">50</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.idle_test_period">600</property>
<property name="hibernate.c3p0.preferredTestQuery">select 1 from dual;</property>

【问题讨论】:

  • 您看到日志了吗?池需要更多时间才能返回任何连接

标签: java hibernate oracle10g c3p0


【解决方案1】:
  1. c3p0-0.9.0.x 非常非常老了。请更新到 0.9.2.1 或最新的 0.9.5 预发行版。较新的版本是直接替换,您只需要更新您的依赖项,或者如果您手动包含 jar 文件,请包含更新的 c3p0 jar 以及您会发现包含在 @ 中的 mchange-commons-java jar 文件987654321@.

  2. 您的性能问题很可能源于将 max_statements 设置为 50。对于可能有多达 50 个活动连接的池来说,这太小了。这意味着平均每个 Connection 在池已满时缓存单个 Statement,并强制 Statement 缓存频繁变动。我建议您从将 max_statements 设置为 0 开始,然后看看情况如何。然后,为了通过语句缓存获得更好的性能,请考虑 1)您的应用程序以持续的方式使用了多少不同的 PreparedStatements(即不仅在初始化时使用一次,而是在应用程序生命周期内重复使用)和 2)将 hibernate.c3p0.maxStatementsPerConnection 设置为大约该值[或将全局 hibernate.c3p0.max_statements 设置为(该值 * expected_pool_size),但为什么不直接使用更容易理解的 maxStatementsPerConnection?]

【讨论】:

  • 谢谢!我会试试的。
【解决方案2】:

如果它是一个非常繁忙的应用程序,您可能需要增加 c3p0.numHelperThreads 的设置

【讨论】:

    猜你喜欢
    • 2016-06-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多