Я создаю приложение, используя Spring-Boot / Hibernate с Postgres в качестве базы данных.Я использую Spring 2.0, поэтому Hikari является поставщиком пула соединений по умолчанию.
В настоящее время я пытаюсь выполнить нагрузочное тестирование приложения с конечной точкой REST, которая выполняет функцию update-if-существующие, и вставьте, еслиновый для сущности в базе данных.Это довольно маленькая сущность с первичным ключом 'BIGSERIAL' и без каких-либо ограничений на любое другое поле.
Размер пула соединений по умолчанию равен 10, и я на самом деле не настраивал другие параметры - ни HikariCP, ни Postgres.
Точка, в которой я застрял на данный момент, заключается в отладке соединений в «активном» состоянии и в том, что они делают или почему они зависают в данный момент.
Когда я запускаю '10 одновременных пользователей', это в основном переводит в 2 или 3 раза больше запросов, и поэтому, когда я включаю журналы отладки HikariCP, он зависает примерно так: (total=10, active=10, idle=0, waiting=2)
и «активные» соединения на самом деле не освобождают соединения, чтоТо, что я пытаюсь выяснить, потому что запросы довольно просты, а сама таблица состоит из 4 полей (включая первичный ключ).
Как правило, лучшие практики HikariCP - это увеличение пула соединений.не правильный первый шаг к масштабированию.
Если я увеличу размер пула подключений до 20, все начнёт работать для 10 одновременных / одновременных пользователей, но опять же, это не является основной причиной / решением проблемы, которую я считаю.
есть ли способ регистрировать сообщения Hibernate или Postgres, которые могут помочь узнать, что ждут эти «активные» соединения и почему соединение не освобождается даже после увеличения времени ожидания до долгого времени?
Если это утечка соединения (как сообщается, когда leak-detection-threshold
уменьшается до более низкого значения (например, 30 секунд)), то как я могу определить, отвечает ли Hibernate за эту утечку соединения или это что-тоеще?
Если это блокировка / ожидание на уровне базы данных, как я могу получить корень этого?
ОБНОВЛЕНИЕ После помощи @brettw я взялсброс потока, когда соединения были исчерпаны, и он указал в направлении утечки соединения.Потоки на HikariCP выдают плату - https://github.com/brettwooldridge/HikariCP/issues/1030#issuecomment-347632771 - которая указывает на то, что Hibernate не закрывает соединения, а затем указывает на https://jira.spring.io/browse/SPR-14548,, который говорит о настройке режима закрытия соединения Hibernate, так как режим по умолчанию удерживает соединение слишкомдолго.После установки spring.jpa.properties.hibernate.connection.handling_mode=DELAYED_ACQUISITION_AND_RELEASE_AFTER_TRANSACTION
пул соединений работал отлично.
Кроме того, указанная здесь точка - https://github.com/brettwooldridge/HikariCP/issues/612#issuecomment-209839908 верна - утечка соединения не должна покрываться пулом.