#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-сервере достаточно памяти и для их обработки.
Кроме того, в вашем пуле подключений должен быть какой-то «тайм-аут ожидания», который вы можете установить перед запуском этого исключения. Таким образом, поток может ожидать освобождения соединения.