Понимание решения о пуле подключения к базе данных
Я работаю над java-приложением openource i.e xwiki. Insie hibernate.cfg.xml Я могу видеть значение параметров connection.pool_size и
statement_cache.siz как 2 (для каждого). Мое приложение будет иметь максимальную нагрузку в 100 пользователей в определенный момент времени. Теперь мой вопрос заключается в том, что должно
это идеальный размер пула соединений для этого. Мне размер 2 выглядит очень реже. Если 100 пользователей подключаются одновременно, 98 пользователей должны ждать, пока
соединение выпущено? Должен ли я держать размер пула соединений равным 100 в моем случае?
Я использую сервер Microsoft SQL Server.
Кроме того, существует ограничение на максимальный размер пула подключений. Это зависит от веб-сервера (tomcat в моем случае) или поставщика хранилища данных (ms sql server)?
Ответы
Ответ 1
Если типичный запрос тратит 50% своего времени на выполнение вычислений и 50% на подключение к базе данных, вам может понадобиться только 50 подключений в вашем пуле. Конечно, ваше приложение должно как можно скорее освободить соединение db.
В общем случае соединение для базы данных не дорого (при создании нового достаточно дорого). Не должно быть проблем, чтобы держать размер достаточно высоким.
Вы можете установить
- максимальный размер пула до 100
- предпочтительный размер пула до 50
- и тайм-аут простоя до 5 минут для объединенных подключений.
Я не знаком с сервером microsoft sql, но я думаю, что его максимальное ограничение пула - 100
Tomcat будет в порядке с таким количеством пулов.
Ответ 2
Размер пула соединений не является тривиальной задачей. Вам в основном нужно:
- для изучения использования соединения
- механизмы переключения при отказе при отсутствии соединения
FlexyPool направлен на то, чтобы помочь вам определить правильный размер пула соединений.
Вы можете проверить следующие статьи:
Ответ 3
Вы должны оценить требование приложения concurrency, время работы базы данных, а также количество подключений, которое может поддерживать сервер (или db-агент).
Таким образом, 100 пользователей не означают, что вам нужен пул соединений с размером 100.
Ответ 4
Остерегайтесь того, что пул может стоить памяти ни для чего, если не используется.
Конфигурация пула сильно зависит от того, где находится ваше узкое место:
CPU, память, диск, сеть, сложные запросы к базе данных, высокая concurrency,... многие из них?
Размер пула по умолчанию часто составляет от 5 до 10.
Сначала убедитесь, что у вас есть проблема с базой данных.
Попробуйте экстремумы, например, 2 или 30 при искусственной нагрузке, и посмотрите, как они себя ведут.
Я думаю, что ссылки, предоставленные @vlad-mihalcea, весьма интересны.