Как мне определить количество подключений, требуемое для объединения в пул?

StackOverflow https://stackoverflow.com/questions/1426138

Вопрос

Я использую hibernate 3.2.2 в своем приложении.Для объединения в пул соединений мы используем c3p0 0.9.1.Я использую общий шаблон DAO и открываю сеанс в шаблоне просмотра для выполнения операций с базой данных.
Мы работаем над новым сайтом вместо существующего сайта.Прямо сейчас количество посещений составляет полмиллиона посещений страницы в существующем приложении.Меня смущает конфигурация c3p0.На каком контрольном уровне я решаю, что соединение не должно быть открыто.максимальное подключение, минимальное подключение, время ожидания, тайм-аут и т.д....

Это было полезно?

Решение

Сначала вам нужно определить, что будет делать пул, если поступит запрос, а бесплатного подключения для его обслуживания нет.Выдает ли это исключение?Вернуть значение null?Блокировать до тех пор, пока другое соединение не будет возвращено в пул?

Как только вы узнаете, что произойдет при превышении пропускной способности, подумайте о том, как вы могли бы справиться с этим в вызывающем коде, и в каких ситуациях это приемлемо, чтобы это произошло.В какой-то момент по мере увеличения количества подключений вам придется начать отказываться обслуживать некоторые запросы, но только вы можете решить, в какой момент это произойдет.Фактический смысл зависит от множества факторов, включая такие вещи, как

  • ваши текущие тарифы на запросы в режиме ожидания и занятости
  • волатильность этих ставок (вам нужно больше "передышки", если ставки сильно скачут)
  • любые будущие прогнозы увеличения производительности по сравнению с улучшениями оборудования и временем разработчика, заложенным в бюджет на доработку этого кода (если вы планируете обновить его через пару месяцев, вам потребуется меньше накладных расходов, чем если бы он продолжал работать в течение пары лет)
  • какие гарантии дает ваша компания относительно производственных мощностей
  • способность клиентов понимать запросы "повторите попытку позже", напримересли вы знаете, что это автоматический скрипт на другом конце, который на минуту отключается от 503 и пытается снова, это лучше, чем человек, получающий сообщение "емкость временно превышена", и оба они намного лучше, чем пакетный скрипт, который получает ответ, отличный от 200, и просто завершает работу с ошибкой.
  • срочность запросов - некоторые запросы (просмотр фотографий котят) могут быть разумно отложены, но другие (заказы на биржевую торговлю) могут быть очень срочными.

И так далее, и тому подобное.

Надеюсь, из вышесказанного вы сможете определить количество запросов, которые вам нужно обрабатывать одновременно (и если есть разные типы по запросу, возможно, вам также придется принять это во внимание).Затем остается только посмотреть, как входящие запросы получают и используют соединения, рассуждая и профилируя, пока вы не обнаружите количество соединений в пуле, необходимое для поддержания вашей целевой скорости соединений.

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

Другие советы

Профилируйте свои тестовые экземпляры, внося небольшие изменения в конфигурацию, а затем, наконец, проверяйте с помощью нагрузочного тестирования.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top