嗨,我有一个奇怪的问题,
我使用Oracle数据库,并具有带有简单端点的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包装的物理数据库连接将关闭。
我需要设置minimumIdle和idleTimeout吗?如果我没有活动2小时,则所有连接都将超过maxLifetime并创建新的连接?不需要minimumIdle吧?
例:
让我们来
minimumIdle 1
idleTimeout 2 minutes
maxLifeTime 20 minutes
当我的应用程序在夜间没有人发出请求时,我希望Hikari在连接的最后一个请求后2分钟关闭每个连接,在关闭最后一个连接之后,创建一个新连接(并将其保存在池中),然后关闭并每20分钟重新创建一次此空闲连接。我理解正确吗?这是我的问题的解决方案吗?
池“重新填充”每30秒左右发生一次。所以如果有5
空闲连接,一个请求进入并消耗其中一个,
如果请求完成并且连接为
在“笔芯”返回之前,该池将再次有5个空闲
连接并且不会增长。
链接:
[Understanding HikariCP’s Connection Pooling behaviour]
最佳答案
当minimumIdle定义为小于maximumPoolSize时,可以设置idleTimeout
⌚idleTimeout
此属性控制允许连接在池中保持空闲状态的最长时间。仅当minimumIdle定义为小于maximumPoolSize时,此设置才适用。一旦池达到MinimumIdle连接,空闲连接将不被取消。