【发布时间】:2016-08-15 19:57:50
【问题描述】:
我在 Spring 服务器上使用 HikariConfig 作为 postgres 数据库的 DataSource。 我应该设置 maxPoolSize 吗? (默认值为 -1) 我可以使用多少池大小? 是否与硬件有任何依赖关系?
【问题讨论】:
标签: spring postgresql datasource connection-pooling hikaricp
我在 Spring 服务器上使用 HikariConfig 作为 postgres 数据库的 DataSource。 我应该设置 maxPoolSize 吗? (默认值为 -1) 我可以使用多少池大小? 是否与硬件有任何依赖关系?
【问题讨论】:
标签: spring postgresql datasource connection-pooling hikaricp
maxPoolSize 是您的应用程序的限制指标。您应该根据流量/应用程序的开销/硬件来计算。 FE 您可以将限制设置为 10000 个连接,这并不意味着它将按预期运行。实际上这会受到您的硬件的影响,因为如果您的机器包含一个内核,那么 100000 个活动连接只会拉伸 java 应用程序和 postgres,因为操作系统将难以处理所有这些 I/O 调用。更糟糕的是,如果数据库和 java 应用程序在同一个网络的不同机器上,你也会有网络开销。
真正优化性能的是 minimumIdle 属性和 idleTimeout ,所以如果你已经为它们计算了一个合适的值,那么它应该永远不会达到 maxConnection 值以及由于锁定而导致开销等待或资源匮乏。这里唯一不好的是,如果您的应用程序设计错误(例如,保持连接比需要的时间更长,没有正确提交事务,不使用批处理作业进行长时间操作),那么它将影响用户体验,但这是另一个问题.
我)
我应该设置 maxPoolSize 吗? (默认值为-1)
您应该将其设置为全局限制,以便您的应用程序和数据库都可维护且健康。默认值不是-1而是10。更多详情here
ii)
我可以使用多少池大小?
这取决于您的应用程序和基础架构。获得这些数字的唯一方法是对最具扩展性的用例进行集成测试。
一些关于 postgres 调整的信息here
iii)
硬件有依赖关系吗?
是的,对于 JVM 和 Postgres 服务器,不仅从硬件角度来看,而且从硬件角度来看,还有你可能选择的操作系统
【讨论】:
我来到这里是因为我也想了解 maxPoolSize 和 minIdle 的 -1 默认值是什么意思。在 HikariConfig 的内部,这两个属性都默认为 -1。 Hikari 代码将这些值与文档中公开宣传的默认值相协调。
public HikariConfig()
{
dataSourceProperties = new Properties();
healthCheckProperties = new Properties();
minIdle = -1;
maxPoolSize = -1;
maxLifetime = MAX_LIFETIME;
...
然后将这些值设置为:
if (maxPoolSize < 1) {
maxPoolSize = DEFAULT_POOL_SIZE;
}
if (minIdle < 0 || minIdle > maxPoolSize) {
minIdle = maxPoolSize;
}
不打算直接回答 OP 的问题,只是为可能来到这里寻找 -1 含义的任何其他人增加清晰度。
【讨论】: