Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подключение к MySQL
 
 автор: Jaroslav   (12.03.2008 в 13:17)   письмо автору
 
 

Объясните, пожалуйcта, в чем разница между

mysql_pconnect()
и
mysql_connect()

?

Может ли при использовании mysql_pconnect() быть повышенная нагрузка на сервер?

   
 
 автор: cheops   (12.03.2008 в 15:11)   письмо автору
 
   для: Jaroslav   (12.03.2008 в 13:17)
 

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

Дело в том, что MySQL - это база данных и клиент-серверный протокол в ней сессионный. Т.е. вы устанавливаете соединение и можете работать с этим соединением часами - под таких клиентов постоянные соединения и затачивались. Если у вас несколько клиентов, которые время от времени разрывают и устанавливают соединение с СУБД, то установка постоянных соединений при помощи mysql_pconnect() оправдана (например, в утилите mysql используется постоянное соединение).
Другое дело, когда речь идёт об Web с его несессионными протоколами - когда любое обращение заканчивается разрывом соединения. Всё это происходит на фоне сотен и тысяч обращений в секунду. Вы можете съэкономить несколько долей секунд на том, что не потребуется создавать новый поток для обращения, однако в таких условиях постоянно висит и ничего не делает огромное количество процессов, каждый из которых может жрать десятки мегабайт оперативной памяти.

Грубый упрощенный пример: Обратилось к вам одновременно 100 посетителей, а в следующие 5 минут у вас одновременно только 3 посетителя, тем не менее на эти 5 минут для вас резервируется 100 процессов, а все остальные пользователи (сайты) на сервере пользоваться вашими соединениями не могут - они для вас зарезервированы. В результате памяти потребляется всё больше и больше, сервер сваливается в swap и начинает тормозить. Постоянные соединения могут быть оправданы хоть как-то только в случае выделенного сервера, когда никого кроме вас нет, но в случае виртуального хостинга - это превращается в бич, так как ресурсы тратятся не эффективно - все эти постоянные потоки большую часть времени просто спят и ожидают одного и того же клиента, все же оставшиеся клиенты ютятся на других процессах. Чем быстрее отрабатывают процессы - тем лучше и шустрее бегает сервер. Процедура создания процесса может быть ещё сопоставима по времени с обработкой запроса сервером Apache, но не с обработкой SQL-запроса. Поэтому в условиях виртуального хостинга постоянными соединениями лучше не злоупотреблять, я бы даже на выделенном сервере не рекомендовал бы его использовать (особенно, если имеется несколько MySQL-клиентов).

   
 
 автор: Jaroslav   (12.03.2008 в 20:37)   письмо автору
 
   для: cheops   (12.03.2008 в 15:11)
 

Большое спасибо за столь подробный ответ!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования