0

我在我的 Web 应用程序中使用 Hibernate。

并为此使用了C3P0连接池机制。

我的配置如下,为了检查它是否正常工作,我将 max_size 和 min_size 设置为 0。我认为理想情况下,如果它是 0,那么它不应该给我任何连接并且应该抛出错误/异常。但它不会做任何这样的事情。它正常工作。

那么,如何确定给定的 C3P0 相关配置是完美的呢?

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/reg</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="connection.autocommit">false</property> 

<!-- Connection pooling configuration -->
<property name="c3p0.acquire_increment">1</property> 
<property name="c3p0.idle_test_period">1</property> <!-- seconds --> 
<property name="c3p0.max_size">0</property> 
<property name="c3p0.max_statements">0</property> 
<property name="c3p0.min_size">0</property> 
<property name="c3p0.timeout">200</property> <!-- seconds --> 


<property name="hibernate.show_sql">false</property>
4

1 回答 1

1

这取决于您正在构建的应用程序。

使用数据库连接池的原因如下:

  • 获取数据库连接是一项昂贵的操作。
  • 您的资源有限,因此一次只能打开有限数量的数据库连接。
  • 并非您的服务器正在处理的所有用户请求都在执行数据库操作,因此您可以在请求之间重用数据库连接。

由于获取新连接的成本很高,因此您应该将 min_size 保持为非零。根据您的应用在轻度使用期间的负载情况,您可以在此处使用一个很好的猜测。通常,在大多数示例中指定 5。

acquire_increment 取决于使用您的应用程序的用户数量增加的速度。因此,想象一下,如果您每次需要额外连接时都要求 1 个新连接,那么您的应用程序可能会表现不佳。因此,预计用户会激增,您可能希望增加更大的块,例如 5 或 10 或更多。

通常,最大。您拥有的数据库连接数可能少于使用您的应用程序的并发用户数。但是,如果您的应用程序是大量数据库,那么您可能必须配置 max_size 以匹配您拥有的并发用户数。

有时即使将 max_size 配置得非常高,您也可能无法处理这么多用户。那时您将不得不考虑重新设计您的应用程序以避免数据库负载。这通常通过将读取操作卸载到仅提供读取操作的备用数据库实例来完成。此外,还采用缓存这种不经常更改但经常读取的数据。

类似的理由也可以应用于其他领域

于 2013-06-26T13:07:55.030 回答