低流量时慢速运行,慢速HikariDataSource.getConnection(),大流量时快速运行

问题描述 投票:0回答:1

嗨,我有一个奇怪的问题,我使用Oracle db并具有带有简单端点的miroservice,该端点只有getById,这非常快3-15ms,但是整个操作花费了250ms。我深入研究了性能监视工具,发现我们花了200毫秒以上的时间来购买com.zaxxer.hikari.HikariDataSource.getConnection()。

然后我向该端点执行2000请求10分钟,时间下降到1.3ms。怎么了?如果每小时有5个请求,则需要200秒钟才能建立连接,但是当每秒有4个1.3时??

配置是否有错误

spring:
 datasource:
    connectionTimeout: 10000
    maxLifetime: 18000000
    maximumPoolSize: 5
    cachePrepStmts: true
    prepStmtCacheSize: 250
    prepStmtCacheSqlLimit: 2048
    useServerPrepStmts: true

编辑:据我了解,如果我们有很长一段时间没有呼叫数据库,则从Hikari包装的物理数据库连接将关闭。我是否需要设置minimumIdleidleTimeout?如果我没有活动2小时,则所有连接都将超过maxLifetime并创建新的连接?不需要minimumIdle吧?示例:拥有

minimumIdle 1
idleTimeout 2 minutes
maxLifeTime 20 minutes

[当我的应用程序在夜间没有人提出请求时,我希望Hikari在连接的最后一个请求后2分钟关闭每个连接,在关闭最后一个连接之后,创建一个新连接(并将其保存在池中),然后每20分钟关闭并重新创建一次此空闲连接。我理解正确吗?这是我的问题的解决方案吗?

池“重新填充”每30秒左右发生一次。所以如果有5空闲连接,一个请求进入并消耗其中一个,如果请求完成并且连接为返回“充值”之前,池中将再次有5个空闲连接,并且不会增长。

链接:[Understanding HikariCP’s Connection Pooling behaviour]enter image description here

java spring oracle pool hikaricp
1个回答
0
投票

当minimumIdle被定义为小于maximumPoolSize时,您可以设置[C0

⌚idleTimeout此属性控制允许连接在池中保持空闲状态的最长时间。仅当minimumIdle定义为小于maximumPoolSize时,此设置才适用。一旦池达到MinimumIdle连接,空闲连接将不会退出。

© www.soinside.com 2019 - 2024. All rights reserved.