Я сталкиваюсь с проблемой, в которой запросы вставки в таблице MySQL застряли в «ожидании блокировки», и даже после innodb_lock_wait_timeout (50S) соединения не выпускаются обратно в Hikaricp, в конечном итоге исчерпывая бассейн. (file_record_v2, уникальный файл_ид), с буфером 2-3 минуты между каждым запросом. < /p>
Spring Boot: 2.7.10
Spring Data JPA: 2.7.10
HikariCP: 4.0.3
Hibernate: 5.6.15.Final
Driver : com.mysql.cj.jdbc.Driver
В. Утечка соединения: почему HikariCP не освобождает соединения после того, как MySQL
истечет время выполнения запроса (как видно из медленных журналов сразу после 50 секунд), и как я могу заставить его автоматически обнаруживать и закрывать такие
соединения.
Я сталкиваюсь с проблемой, в которой запросы вставки в таблице MySQL застряли в «ожидании блокировки», и даже после innodb_lock_wait_timeout (50S) соединения не выпускаются обратно в Hikaricp, в конечном итоге исчерпывая бассейн. (file_record_v2, уникальный файл_ид), с буфером 2-3 минуты между каждым запросом. < /p> [code]INSERT INTO file_record_v2 (iso_country_code, created_at, modified_at, bucket, file_id, file_key, file_name, path, status, upload_date, uploaded_by) VALUES ('IN', '2025-10-01 17:22:39.867', '2025-10-01 17:22:39.867', 'Fo/89NveRaWnfjgvfsmrIE5ca7kQ2LkqvV9AKTmn0Qw=', '777a7379-6c96-35d1-b47e-17b1708258f5', 'abcdef', '1759316708189.csv', NULL, 'success', '2025-10-01', 'admin@gmail.com'); < /code> [b] Что происходит: < /strong> < /p> Первая вставка преуспела. 2 -й запрос запросов мгновенно бросает исключение - java.sql.sqlintegrityConstraintviolationException: дублировать запись ... После того, как все последующие вставки. Вошли в 50 -й секунды (все 50 -й секунды (все это касается 50 -й секунды.innodb_lock_wait_timeout[/code]). Mysql Медленные журналы: [/b] [code]> User@Host: admin[admin] @ [xx.xxx.xx.216] thread_id: 3225252 server_id: 2921685337 > Query_time: 50.939886 Lock_time: 50.939609 Rows_sent: 0 Rows_examined: 0 use > shard0; SET timestamp=1759319339; insert into file_record_v2 > (iso_country_code, created_at, modified_at, bucket, file_id, file_key, > file_name, path, status, upload_date, uploaded_by) values ('IN', > '2025-10-01 17:18:59.548', '2025-10-01 17:18:59.548', > 'Fo/89NveRaWnfjgvfsmrIE5ca7kQ2LkqvV9AKTmn0Qw=', > '777a7379-6c96-35d1-b47e-17b1708258f5', 'abcdef', '1759316708189.csv', > null, 'success', '2025-10-01', 'admin@gmail.com'); < /code> Через 50 секунд MySQL Times Out запросов на ожидание, но Хикари не возвращает эти соединения в пул. В конце концов, все 5 соединений в пуле становятся исчерпывающими, и приложение начало бросать: < /p> [b] ошибка: < /strong>
javavexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexexcre Hikaripool -1 - Соединение недоступно ...
fileRecordRepository.save(entity); // Only DB query which got latent
return new FileUploadResponse(fileId, null);
} catch (ConstraintViolationException | DataIntegrityViolationException e) { log.error(e.getMessage(), e); if (StringUtils.containsIgnoreCase(e.getCause().getCause().getMessage(), "Duplicate entry")) throw new FileValidationException(String.format("Duplicate file: %s", fileName)); throw e; } } [/code] recovery [/b]: Мы восстановились после перезапуска приложения, чтобы освободить исчерпанный пул. [b] версия [/b]: [code]Spring Boot: 2.7.10 Spring Data JPA: 2.7.10 HikariCP: 4.0.3 Hibernate: 5.6.15.Final Driver : com.mysql.cj.jdbc.Driver [/code]
В. Утечка соединения: почему HikariCP не освобождает соединения после того, как MySQL истечет время выполнения запроса (как видно из медленных журналов сразу после 50 секунд), и как я могу заставить его автоматически обнаруживать и закрывать такие соединения.