Оптимальное количество соединений в пуле соединений - PullRequest
31 голосов
/ 30 июля 2009

В настоящее время мы используем коробку с 4 процессорами Windows с 8 ГБ ОЗУ, на которой установлен MySQL 5.x. Мы используем сервер приложений Weblogic для нашего приложения. Мы ориентируемся на 200 одновременных пользователей для нашего приложения (очевидно, не для того же модуля / экрана). Итак, какое оптимальное количество соединений мы должны сконфигурировать в пуле соединений (минимальное и максимальное количество) (мы используем механизм пула соединений weblogic AS)?

Ответы [ 8 ]

54 голосов
/ 31 июля 2009

Вы действительно имели в виду 200 одновременных пользователей или только 200 зарегистрированных пользователей? В большинстве случаев пользователь браузера не сможет выполнять более 1 запроса страницы в секунду. Таким образом, 200 пользователей переводятся в 200 транзакций в секунду. Это довольно большое число для большинства приложений.

Независимо от примера, давайте пойдем с 200 транзакциями в секунду. Скажем, каждый tx-интерфейс (браузер) завершается за 0,5 секунды, а из 0,5 секунд в базе данных тратится 0,25. Таким образом, вам потребуется 0,5 * 200 или 100 соединений в пуле тем WebLogic и 0,25 * 200 = 50 соединений в пуле соединений БД.

Чтобы быть в безопасности, я бы установил максимальный размер пула потоков как минимум на 25% больше, чем вы ожидаете, чтобы учесть скачки нагрузки. Минимумы могут составлять небольшую долю от максимума, но компромисс заключается в том, что для некоторых пользователей это может занять больше времени, поскольку необходимо будет создать новое соединение. В этом случае 50-100 соединений не так много для БД, так что это, вероятно, хорошее начальное число.

Обратите внимание, что для определения среднего времени отклика транзакции, а также среднего времени запроса к базе данных вам нужно будет провести тест производительности, поскольку время загрузки, вероятно, не будет таким, как вы видите. с одним пользователем.

10 голосов
/ 19 апреля 2010

Существует очень простой ответ на этот вопрос:

Количество соединений в пуле соединений должно быть равно числу потоков exec, настроенных в WebLogic .

Обоснование очень простое: если количество соединений меньше количества потоков, возможно, некоторые потоки ожидают соединения, что делает пул соединений узким местом. Таким образом, он должен быть равен как минимум числу потоков exec (размер пула потоков).

9 голосов
/ 28 мая 2014

Определение размера пула соединений не является простой задачей. Вам в основном нужно:

  • метрики для исследования использования соединения
  • механизмы аварийного переключения при отсутствии доступного соединения

FlexyPool призван помочь вам определить правильный размер пула соединений.

Вы можете проверить следующие статьи:

6 голосов
/ 30 июля 2009

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

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

2 голосов
/ 30 июля 2009

Пул соединений должен иметь возможность увеличиваться и увеличиваться в зависимости от фактических потребностей. Записывайте числа, необходимые для анализа в работающей системе, либо с помощью операторов регистрации, либо с помощью наблюдения JMX. Рассмотрите возможность настройки предупреждений для сценариев, таких как «обнаружен пик: более X новых записей пришлось выделить за Y секунд», «соединение не было в пуле более X секунд», что позволит вам обратить внимание на проблемы с производительностью до того, как они получат реальные проблемы.

1 голос
/ 30 июля 2009

Трудно получить достоверные данные для этого. Это также зависит от ряда факторов, которые вы не упомянули -

  • 200 одновременно работающих пользователей, но какая часть их активности будет генерировать запросы к базе данных? 10 запросов на страницу загрузки? 1 запрос только при входе в систему? и т. д.

  • Размер запросов и БД, очевидно. Некоторые запросы выполняются в миллисекундах, некоторые в минутах.

Вы можете отслеживать mysql для просмотра текущих активных запросов с помощью «show processlist». Это может дать вам лучшее представление о том, сколько активности на самом деле происходит в БД при пиковой нагрузке.

1 голос
/ 30 июля 2009

Это то, что должно быть проверено и определено на индивидуальной основе - почти невозможно дать точный ответ для ваших обстоятельств , не зная их близко.

0 голосов
/ 28 марта 2019

Исходя из моего опыта работы с финансовыми системами с высокими транзакциями, если вы хотите обрабатывать, например, 1K запросов в секунду , и у вас есть 32 ЦП, вам нужно иметь 1000/32 открытых опросов соединений для ваша база данных.

Вот моя формула:

RPS / CPU_COUNT

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

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

Удачи.

...