如何选择最大连接池大小?

时间:2012-11-04 16:25:00

标签: java hibernate connection-pooling c3p0

<property name="hibernateProperties">
  <props>           
    <prop key="hibernate.c3p0.max_size">?</prop>
  </props>
</property>

它只是一个随机数猜测吗?或者是否有任何研究建议对特定用例使用特定范围?

1 个答案:

答案 0 :(得分:4)

好吧,假设你在谈论一个生产系统,那么“随机数猜测”肯定不是答案。实际上,“随机数猜测”绝不是生产环境中任何类型配置的答案。 “仅接受产品的默认值”也是如此。

连接池属性(例如max_size)取决于以下几个因素:

  • 预期使用。例如,如果您期望10个并发用户的典型使用模式,偶尔突发20个用户,即使您认为您的计算机可以处理它,将数字50设置为最大大小也没什么意义。虽然它一见钟情似乎无害,但您必须记住数据库连接是一种昂贵的资源,有时候,您可能希望实际限制使用以满足您的期望,如果只是将您自己的假设进行测试并了解真实的,类似生产的,系统的使用模式,以及防止您的应用程序成为资源困境,可能会影响其他应用程序。

  • 可用资源。如果您知道(并且很容易验证)您的数据库一次只能接受30个连接,那么无论应用程序的使用模式如何,设置大于30的数字都是毫无意义的。

  • 应用程序设计。您的应用程序是否主要使用短期连接?长期的联系?您是否为JDBC调用设置了超时,因此您的JDBC调用是有时间限制的?例如,当您知道您正在为每个操作设置30秒的超时时,如何配置连接池,与您定义该池的方式相比,知道您设置了超时2分钟。

  • 特定产品注意事项。我不确定c3p0,但是某些提供连接池机制的容器会将自己的因素带入等式中。如果您正在使用容器提供的连接池功能,则应阅读该容器的文档,以了解容器的供应商是否对配置他们为您提供的连接池机制有一些了解。

...只是不要猜数字。

......不要只假设产品的默认值。