Я использую базу данных Oracle и имею 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
Пополнение пула происходит примерно каждые 30 секунд. Таким образом, если имеется 5
простаивающих подключений и запрос поступает и использует одно из них,
оставляя 4 незанятых, если запрос завершается и соединение
возвращается до «пополнения», пул снова будет иметь 5 простаивающих
подключений и не будет расти.
Ссылка:
[Понимание поведения пула соединений HikariCP]

Подробнее здесь: https://stackoverflow.com/questions/582 ... big-traffi
Мобильная версия