Mysql пул соединений: вопрос стоит ли? - PullRequest
15 голосов
/ 01 января 2009

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

У кого-нибудь есть опыт с этим?

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

Ответы [ 5 ]

10 голосов
/ 02 января 2009

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

Возможно, время соединения MySQL довольно быстрое, особенно если вы подключаетесь через сокеты Unix на одной машине. Если вы используете пул соединений, вы также хотите убедиться, что соединения будут перезагружены через некоторое время, поскольку клиентская библиотека MySQL автоматически отключит соединения, которые простаивают более 8 часов (в SQLAlchemy это опция pool_recycle).

Вы можете быстро выполнить некоторое сопоставление пула соединений по сравнению с non с приложением SQLA, изменив реализацию пула со значения по умолчанию QueuePool на NullPool, которое является реализацией пула, которая фактически ничего не объединяет - она ​​подключается и отключается реальный, когда прокси-соединение получено, а затем закрыто.

6 голосов
/ 01 января 2009

Даже если часть соединения самого MySQL довольно гладкая, предположительно, все еще используется сетевое соединение (будь то шлейф или физическое). Если вы делаете лот запросов, это может быть значительно дороже. Конечно, это будет зависеть (как это часто бывает) от того, что именно делает ваше приложение - если вы выполняете много работы для каждого соединения, тогда это будет доминировать, а вы не получите много.

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

2 голосов
/ 06 января 2009

Краткий ответ: вам нужно протестировать его.

Длинный ответ: это зависит. MySQL быстр для настройки соединения, поэтому избегание таких затрат не является хорошей причиной для создания пула соединений. Вы выигрываете, если запросы выполняются мало и быстро, потому что тогда вы увидите выигрыш с пулированием.

Другая проблема заключается в том, как приложение обрабатывает поток SQL. Если он не выполняет транзакции SQL и не делает никаких предположений о состоянии потока, то объединение не будет проблемой. OTOH, код, который использует закрытие потока для отбрасывания временных таблиц или для отката транзакций, будет иметь много проблем с пулами.

0 голосов
/ 20 октября 2011

Я сделал простой сервис RESTful с Django и протестировал его с пулом соединений и без него. В моем случае разница была довольно заметной.

В локальной сети время отклика составляло от 1 до 5 секунд. При этом менее 20 мс. Результаты могут отличаться, но конфигурация, которую я использую для серверов MySQL и Apache, довольно стандартна.

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

0 голосов
/ 01 января 2009

Пул соединений ускоряет процесс в том смысле, что вам не нужно создавать объект java.sql.Connection каждый раз, когда вы выполняете запрос к базе данных. Я использую пул соединений Tomcat для базы данных mysql для веб-приложений, которые выполняют много запросов, при высокой пользовательской нагрузке заметно улучшение скорости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...