Большой размер пула соединений в режиме гибернации

#java #hibernate #connection-pooling

#java #Переход в режим гибернации #объединение в пул соединений

Вопрос:

В настоящее время я запускаю игру, в которой я использую режим гибернации в качестве своего ORM. Недавно у нас было много игроков, которые заходили в игру одновременно. Это привело к переходу в режим гибернации

 Exception in thread "main" org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!
  

Для моих свойств пула установлено значение 10. Моя непосредственная мысль — просто увеличить размер пула до 100 или даже 1000, но я не уверен, каковы последствия этого. Я предполагаю, что большой размер пула может привести к сбою системы, когда в базе данных одновременно запущено более 100 потоков.

Будет ли производительность основным аспектом, на который влияют большие размеры пула? Есть ли что-нибудь еще, что я должен учитывать при настройке размера пула?

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

1. Предполагается, что ваша библиотека пула соединений ставит в очередь новые соединения, а не удаляет их. Какой пул соединений вы используете? Существует формула для оптимального количества подключений к базе данных; слишком большое количество подключений приведет к зависанию вашей системы.

Ответ №1:

Максимальное количество подключений, которые вы могли бы использовать, равно максимальному количеству потоков, доступных вашему приложению для обработки запросов. Реальное число будет меньше в зависимости от вида работы, которую выполняет ваш поток помимо подключения к базе данных.

Вы должны проверить, что ваша база данных может обрабатывать такое количество подключений.

Соединения занимают изрядный объем памяти, поэтому вам следует убедиться, что на вашем Java-сервере достаточно памяти и для их обработки.

Кроме того, в вашем пуле подключений должен быть какой-то «тайм-аут ожидания», который вы можете установить перед запуском этого исключения. Таким образом, поток может ожидать освобождения соединения.