Hibernate语句池不适用于使用C3P0的db2 9.7

时间:2015-04-13 14:48:08

标签: hibernate c3p0

<hibernate-configuration>
 <session-factory name="sessionFactory">

  <!-- Database connection settings -->

  <property name="connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
  <property name="connection.url">jdbc:db2://xx.xx.xx.xx:*****/DB</property>



  <property name="connection.username">XYZ</property>
  <property name="connection.password">XYZW</property>
  <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
  <property name="hibernate.c3p0.min_size">50</property>
  <property name="hibernate.c3p0.max_size">200</property>  
  <property name="hibernate.c3p0.max_statements">50</property>
  <property name="hibernate.c3p0.idle_test_period">1800</property>
  <property name="hibernate.c3p0.timeout">3600</property>   
  <property name="dialect">org.hibernate.dialect.DB2Dialect</property>   
  <property name="current_session_context_class">thread</property>
  <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
  <property name="hibernate.connection.release_mode">auto</property>  
  <property name="show_sql">true</property>
  <property name="hbm2ddl.auto">false</property>





 </session-factory>


</hibernate-configuration>

这是Hibernate配置文件。 我正在尝试使用预准备语句缓存,但使用不同的参数,获取缓存未命中并在Global语句缓存中添加新条目。我正在使用带有JDBC 4.0驱动程序的DB2 9.7。

1 个答案:

答案 0 :(得分:0)

您的池最多可包含200个连接,并且您已设置全局最多50个PreparedStatements。在容量方面,您的Connections平均会缓存0.25个语句,或者更直接,4个连接中的3个将不会缓存任何语句。您的应用程序可能会使用多个PreparedStatement,因此即使是那些带有Statement缓存的幸运少数几个连接也会导致缓存未命中。

如果您想要更少的未命中,请将max_statements设置为更高或更好的值,完全消除max_statements设置,并尝试更容易推理maxStatementsPerConnection设置。将其设置为类似于应用程序中频繁使用的pf PreparedStatements数字。

有关详细信息,请参阅http://www.mchange.com/projects/c3p0/#configuring_statement_pooling