Понимание решения о пуле подключения к базе данных

Я работаю над 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, весьма интересны.