Hibernate C3P0设置性能问题

时间:2014-03-19 16:57:33

标签: java hibernate oracle10g c3p0

由于我们已将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>

2 个答案:

答案 0 :(得分:2)

  1. c3p0-0.9.0.x非常非常老。请更新到0.9.2.1或最新的0.9.5预发行版。更新的版本是直接替换,您只需要更新您的依赖项,或者如果您手动包含jar文件,请包含更新的c3p0 jar以及您将在其中找到的mchange-commons-java jar文件binary distribution

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

答案 1 :(得分:0)

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