Apache -> MySQL несколько соединений против одного соединения - PullRequest
2 голосов
/ 09 октября 2009

Я думал, почему Apache запускает новое соединение с сервером MySQL для каждого запроса страницы? Почему он просто не поддерживает ОДНО соединение всегда и отправляет все sql запросы через это одно соединение (очевидно, с идентификатором клиента, прикрепленным к каждому требованию)?

Это сокращает время, затрачиваемое на рукопожатие, и пару других преимуществ, которые я вижу.

Это похоже на подключение компьютера каждый раз, когда вы хотите его использовать. Зачем ходить в розетку каждый раз, когда вы можете просто оставить ее подключенной?

Ответы [ 3 ]

2 голосов
/ 09 октября 2009

MySQL не поддерживает несколько сеансов по одному соединению.

Oracle, например, позволяет это, и вы можете настроить Apache для объединения нескольких логических сеансов через одно TCP соединение.

Это ограничение MySQL, а не Apache или языков сценариев.

Существуют модули, которые могут выполнять пул сеансов:

  • Предварительно определите количество соединений
  • Выберите бесплатное подключение по запросу
  • Создание дополнительных подключений, если недоступно бесплатное подключение.
2 голосов
/ 09 октября 2009

причина в том, что это проще.

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

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

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

1 голос
/ 09 октября 2009

Потому что это цель модуля mod_dbd.

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