Привет, у меня странная проблема, я использую Oracle db и имею miroservice с простой конечной точкой, которая имеет только getById, который очень быстр 3-15 мс, но вся операция заняла 250 мс. Я погрузился в наши инструменты мониторинга производительности и увидел, что мы тратим более 200 мс на com.zaxxer.hikari.HikariDataSource.getConnection ().
Затем я выполняю 2000 запросов к этой конечной точке в течение 10 минут и время сокращается до1,3 мс. Что происходит? При наличии 5 запросов в час для соединения требуется 200 с, но при наличии 4 в секунду 1.3.?
Есть ли ошибки в конфигурации
spring:
datasource:
connectionTimeout: 10000
maxLifetime: 18000000
maximumPoolSize: 5
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
Редактировать: Как я понимаю, если у нас большой период без обращения к БД, эти физические соединения с БД, обернутые из Хикари, закрыты. Нужно ли устанавливать MinimumIdle и idleTimeout ? Если у меня неактивность 2 часа, все соединения будут закончены через maxLifetime, и будет создано новое соединение? Нет необходимости в минимальном простое, верно? Пример: Пусть иметь
minimumIdle 1
idleTimeout 2 minutes
maxLifeTime 20 minutes
Когда мое приложение остается без присмотра в течение ночи, я ожидаю, что Hikari закроет каждое соединение через 2 минуты после последнего запроса соединения, после последнего соединениябудучи закрытым, создайте новое (и удерживайте его в пуле), а затем закрывайте и заново создавайте это свободное соединение каждые 20 минут. Я правильно понял? И это решение моей проблемы?
Пополнение пула происходит каждые 30 секунд или около того. Таким образом, если имеется 5 незанятых соединений, и приходит запрос и использует одно из них, оставляя 4 незанятых, если запрос завершается и соединение возвращается до «пополнения», пул снова будет иметь 5 незанятых соединений и не будет расти.
Ссылка: [Понимание поведения пула соединений HikariCP]