пул hikari выбрасывает тайм-аут

#spring-boot #hikaricp

#весенняя загрузка #hikaricp

Вопрос:

Я использую весеннюю загрузку 2.2.2. РЕЛИЗ, hikari версия 3.4.1

Получение следующей ошибки тайм-аута в hikari

Статистика сбоев тайм-аута (всего = 30, активно = 1, бездействие = 29, ожидание = 163)

Есть 29 незанятых соединений, по-прежнему происходит сбой тайм-аута.

Ответ №1:

Не могли бы вы попробовать приведенную ниже конфигурацию, у нас была такая же проблема в нашей среде контроля качества, эта конфигурация работает для 50-100 запросов в секунду, пожалуйста, оставьте время ожидания и максимальное время жизни как есть

 private static DataSource pool;
final HikariConfig config = new HikariConfig();
config.setMinimumIdle(5);
config.setMaximumPoolSize(50);
config.setConnectionTimeout(10000);
config.setJdbcUrl(JDBC_URL);
config.setUsername(JDBC_USER);
config.setPassword(JDBC_PASS);

pool = new HikariDataSource(config); 
  

Комментарии:

1. Хорошо, я попробую. Но почему приложение не может получить соединение из пула. Хотя он показывает незанятые соединения как 29

2. Другой проблемой может быть утечка соединения, и тогда проблема не связана с HikariCP. Иногда проблема сохранялась из-за некоторых сложных методов, выполняющих множественные изменения в БД через репозитории JPA. По некоторым причинам вызовы этих интерфейсов приводили к росту числа «зависших» активных соединений, истощая пул. Либо аннотирование этих методов как @Transactional, либо включение всей логики в один вызов метода транзакционной службы должно решить проблему.

3. Но активные соединения не зависают. Поскольку активное соединение только одно, это означает, что соединения освобождаются. Незанятые соединения, т.Е. соединения NOT_IN_USE, показывают 29 из 30 соединений. Проблема возникает случайным образом. В течение 30 минут приложению не удавалось установить соединение, затем оно исправилось само по себе

4. Также это не утечка соединения, поскольку соединения освобождаются, это подтверждено.