HikariConfig 和 maxPoolSize
HikariConfig and maxPoolSize
我在 spring 服务器上使用 HikariConfig 作为 postgres 数据库的数据源。
我应该设置 maxPoolSize 吗? (默认值为 -1)
我可以使用多少池大小?
是否与硬件有任何依赖关系?
maxPoolSize
是一个指标,作为您应用程序的限制。您应该根据流量/应用程序的开销/硬件来计算。 F.E 您可以将限制设置为 10000 个连接,这并不意味着它将按预期运行。实际上这会受到您的硬件的影响,因为如果您的机器包含一个核心,那么 100000 个活动连接将同时拉伸 java 应用程序和 postgres,因为 OS 将难以处理所有这些 I/O 来电。更糟糕的是,如果数据库和 java 应用程序位于同一网络中的不同机器上,您还会有网络开销。
真正优化性能的是 minimumIdle
属性 和 idleTimeout
,所以如果你已经为这些计算了一个合适的值,那么它永远不会达到 maxConnection
值以及由于锁等待或资源匮乏导致的开销。这里唯一不好的是,如果您的应用程序设计错误(f.e。保持连接的时间超过需要的时间,没有正确提交事务,没有使用批处理作业进行长时间操作),那么它将影响用户的体验,但这是另一个问题。
i)
Should I set up maxPoolSize? (default value is -1)
您应该将其设置为全局限制,以便您的应用程序和数据库都可维护且健康。默认值不是 -1 而是 10。更多详细信息 here
ii)
How much pool size can i use?
这取决于您的应用程序和基础架构。获得这些数字的唯一方法是对最复杂的用例进行集成测试。
关于 postgres 调整的一些信息 here
iii)
Are there any dependencies with hardware?
是的,对于 JVM 和 Postgres 服务器,不仅从硬件的角度来看,还有你可能选择的 OS
我来到这里是因为我也想了解 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 含义的其他人增加清晰度。
我在 spring 服务器上使用 HikariConfig 作为 postgres 数据库的数据源。 我应该设置 maxPoolSize 吗? (默认值为 -1) 我可以使用多少池大小? 是否与硬件有任何依赖关系?
maxPoolSize
是一个指标,作为您应用程序的限制。您应该根据流量/应用程序的开销/硬件来计算。 F.E 您可以将限制设置为 10000 个连接,这并不意味着它将按预期运行。实际上这会受到您的硬件的影响,因为如果您的机器包含一个核心,那么 100000 个活动连接将同时拉伸 java 应用程序和 postgres,因为 OS 将难以处理所有这些 I/O 来电。更糟糕的是,如果数据库和 java 应用程序位于同一网络中的不同机器上,您还会有网络开销。
真正优化性能的是 minimumIdle
属性 和 idleTimeout
,所以如果你已经为这些计算了一个合适的值,那么它永远不会达到 maxConnection
值以及由于锁等待或资源匮乏导致的开销。这里唯一不好的是,如果您的应用程序设计错误(f.e。保持连接的时间超过需要的时间,没有正确提交事务,没有使用批处理作业进行长时间操作),那么它将影响用户的体验,但这是另一个问题。
i)
Should I set up maxPoolSize? (default value is -1)
您应该将其设置为全局限制,以便您的应用程序和数据库都可维护且健康。默认值不是 -1 而是 10。更多详细信息 here
ii)
How much pool size can i use?
这取决于您的应用程序和基础架构。获得这些数字的唯一方法是对最复杂的用例进行集成测试。
关于 postgres 调整的一些信息 here
iii)
Are there any dependencies with hardware?
是的,对于 JVM 和 Postgres 服务器,不仅从硬件的角度来看,还有你可能选择的 OS
我来到这里是因为我也想了解 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 含义的其他人增加清晰度。