<property name="hibernateProperties">
<props>
<prop key="hibernate.c3p0.max_size">?</prop>
</props>
</property>
这只是一个随机数猜测吗?或者是否有任何研究建议将特定范围用于特定用例?
<property name="hibernateProperties">
<props>
<prop key="hibernate.c3p0.max_size">?</prop>
</props>
</property>
这只是一个随机数猜测吗?或者是否有任何研究建议将特定范围用于特定用例?
好吧,假设您正在谈论生产系统,那么“随机数猜测”绝对不是答案。实际上,“随机数猜测”永远不是生产环境中任何类型配置的答案。“只接受产品的默认值”也是如此。
连接池属性(例如max_size
)取决于几个因素:
预期用途。例如,如果您期望 10 个并发用户的典型使用模式,偶尔会出现 20 个用户,那么将数字 50 设置为最大大小没有什么意义,即使您认为您的机器可以处理它。虽然乍一看似乎无害,但您必须记住,数据库连接是一种昂贵的资源,有时您可能希望实际限制使用量以符合您的期望,如果只是为了测试您自己的假设并了解真实的,类似生产的系统使用模式,并防止您的应用程序成为资源占用,从而可能影响其他应用程序。
可用资源。如果您知道(并且很容易验证)您的数据库一次只能接受 30 个连接,那么无论应用程序的使用模式如何,设置大于 30 的数字都是没有意义的。
应用程序设计。您的应用程序将主要使用短期连接吗?长期连接?您是否为 JDBC 调用设置了超时,因此您的 JDBC 调用一开始是有时间限制的?例如,当您知道将每个操作的超时设置为 30 秒时,您将如何配置连接池与知道您将超时设置为 2 分钟时如何定义该池相比,存在差异。
具体产品注意事项。我不确定c3p0
,但某些提供连接池机制的容器将它们自己的因素纳入等式。如果您正在使用容器提供的连接池功能,您应该阅读该容器的文档,以了解容器的供应商是否对配置他们提供的连接池机制有一定的了解。
...只是不要猜测一个数字。
...并且不要只假设产品的默认值。