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

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


person Shashi    schedule 15.09.2009    source источник
comment
да. спасибо .. я меняю его на полмиллиона.   -  person Shashi    schedule 15.09.2009
comment
Привет, Шаши. Возможно, вы захотите взглянуть на stackoverflow.com/questions/1208077/.   -  person Matt Solnit    schedule 16.09.2009


Ответы (2)


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

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

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

И так далее.

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

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

person Community    schedule 03.11.2009

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

person Community    schedule 03.11.2009