|
|
|
| Объясните, пожалуйcта, в чем разница между
mysql_pconnect()
и
mysql_connect()
?
Может ли при использовании mysql_pconnect() быть повышенная нагрузка на сервер? | |
|
|
|
|
|
|
|
для: Jaroslav
(12.03.2008 в 13:17)
| | Да в Web, может, хотя постоянные соединения задумывались для уменьшения нагрузки (в классических приложениях).
Дело в том, что MySQL - это база данных и клиент-серверный протокол в ней сессионный. Т.е. вы устанавливаете соединение и можете работать с этим соединением часами - под таких клиентов постоянные соединения и затачивались. Если у вас несколько клиентов, которые время от времени разрывают и устанавливают соединение с СУБД, то установка постоянных соединений при помощи mysql_pconnect() оправдана (например, в утилите mysql используется постоянное соединение).
Другое дело, когда речь идёт об Web с его несессионными протоколами - когда любое обращение заканчивается разрывом соединения. Всё это происходит на фоне сотен и тысяч обращений в секунду. Вы можете съэкономить несколько долей секунд на том, что не потребуется создавать новый поток для обращения, однако в таких условиях постоянно висит и ничего не делает огромное количество процессов, каждый из которых может жрать десятки мегабайт оперативной памяти.
Грубый упрощенный пример: Обратилось к вам одновременно 100 посетителей, а в следующие 5 минут у вас одновременно только 3 посетителя, тем не менее на эти 5 минут для вас резервируется 100 процессов, а все остальные пользователи (сайты) на сервере пользоваться вашими соединениями не могут - они для вас зарезервированы. В результате памяти потребляется всё больше и больше, сервер сваливается в swap и начинает тормозить. Постоянные соединения могут быть оправданы хоть как-то только в случае выделенного сервера, когда никого кроме вас нет, но в случае виртуального хостинга - это превращается в бич, так как ресурсы тратятся не эффективно - все эти постоянные потоки большую часть времени просто спят и ожидают одного и того же клиента, все же оставшиеся клиенты ютятся на других процессах. Чем быстрее отрабатывают процессы - тем лучше и шустрее бегает сервер. Процедура создания процесса может быть ещё сопоставима по времени с обработкой запроса сервером Apache, но не с обработкой SQL-запроса. Поэтому в условиях виртуального хостинга постоянными соединениями лучше не злоупотреблять, я бы даже на выделенном сервере не рекомендовал бы его использовать (особенно, если имеется несколько MySQL-клиентов). | |
|
|
|
|
|
|
|
для: cheops
(12.03.2008 в 15:11)
| | Большое спасибо за столь подробный ответ! | |
|
|
|