2013-08-18 3 views
3

Я немного запутался в пулах соединений. Я использую Hibernate поверх базы данных MySQL. Стратегия пула соединений Hibernate определяется c3p0.Пулы соединения C3P0 и пулы соединений MySQL

Какова связь между размером пула подключений Hibernate и MySQL?

Мой код, запускающий Hibernate, можно масштабировать до нескольких экземпляров на AWS (так что n # экземпляров, каждый из которых имеет размер пула подключений Hibernate). Однако все экземпляры говорят об одном экземпляре RDS MySQL, который сам имеет размер пула соединений q.

Означает ли это, что если есть активные соединения n * m и n * m> q, будут ли подключения, которые должны будут ждать в очереди MySQL?

Спасибо!

ответ

1

Ваш вопрос задает вопрос о размере пула соединений Hibernate и MySQL. Важным отличием, которое следует иметь в виду, является:

  • Пул соединений - это концепция приложения, а не база данных. Пул соединений, используемый вашим приложением (т. Е. Hibernate), является просто способом ускорения связи с базой данных. Поскольку установление каждого соединения происходит относительно медленно, более эффективно создавать связку соединений, а затем использовать ваше приложение при необходимости.

  • С другой стороны, база данных не объединяет соединения. Вместо этого он позволяет клиентам устанавливать соединения по запросу до максимального предела (например, параметр max_connections в MySQL). Если клиент запрашивает соединение, и база данных уже достигла максимального предела, тогда произойдет connection error.

Так, чтобы ответить на ваш вопрос, если настроить пулы соединений приложения, чтобы попытаться предварительно установить больше соединений, чем база данных позволят, вы получите сообщение об ошибке «Слишком много соединений» с MySQL. Этого можно избежать, подняв параметр конфигурации MySQL или отрегулировав размер вашего пула c3p0 max для каждого экземпляра.