А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/zametki/pconnect/
Rambler's Top100
PHP. Заметки. connect или pconnect?

Сегодня PHP предоставляет нам выбор между двумя типами подключений к базам данных: обычное подключение и так называемое постоянное подключение (persistent connection).

Хоть это и относится к различным SQL-базам, но разницы в подходе нет почти никакой; по обыкновению, мы будем рассматривать пример с MySQL.

В последнее время тема постоянных соединений довольно часто поднимается на моем форуме (http://forum.kurepin.ru), хочу, как говорится, внести некоторую ясность в этот вопрос.

Принципиальное отличие традиционного соединения от постоянного заключается в самом названии — "постоянное" соединение.

Как же так? Ведь соединение должно закрыться после того, как PHP-скрипт завершил свою работу. А вот и нет. При вызове функции pconnect PHP-движок совершает следующие действия: проверяет, нет ли уже установленного соединения к указанной базе данных указанным пользователем; если соединение есть, то идентификатор соединения просто передается выполняющемуся скрипту; если указанного соединения нет, то оно создается и идентификатор опять же передается скрипту.

После завершения работы скрипта PHP не закрывает соединение, а продолжает его сохранять, раздавая указатели на него другим скриптам, и даже если ваш скрипт завершается вызовом mysql_close(), это ничуть не помешает PHP сохранить persistent connection.

Когда же на самом деле "умрет" соединение? Конечно, соединение не может жить само по себе, оно живет в оперативном пространстве работающего экземпляра (child) apache. И как только child перестает существовать, с ним "умирает" и постоянное соединение.

Каковы же минусы и плюсы постоянного подключения к базе данных?

Минусов, скажу я вам, практически нет. Просто надо быть осторожным, чтобы количество "детей" apache не превышало параметра max_user_connection в настройках MySQL. Дело в том, что каждый экземпляр apache работает независимо от других, поэтому создает свое собственное постоянное соединение, и если количество "детей" apache (а вместе с ним и количество постоянных соединений) превысит максимально допустимое значение MySQL, возникнет ошибка подключения к базе данных. Чтобы подобных ошибок не происходило, убедитесь, что параметр apache MaxClient не превышал параметра MySQL max_user_connection. А заодно следите за тем, чтобы в ваших скриптах не смешивались постоянные и обычные "короткие" подключения к базе данных. Это тоже может вызвать переполнение допустимого значения одновременных подключений.

Теперь о плюсах. В качестве несомненного плюса выступает скорость соединения с базой данных. Фактически, каждый скрипт, вызывающий функцию подключения к базе, не производит еще одного подключения, а задействует уже существующее соединение, к тому же не закрывая его. Очевидно, что времени на выполнение такого "подключения" нужно намного меньше, чем при обыкновенном (временном) подключении. С постоянным подключением мы ускоряем скорость соединения и снижаем нагрузку на сервер.

Лично я на сегодняшний момент использую постоянные подключения, чтобы снизить нагрузку на сервер. По большей части — я доволен результатами работы pconnect.

28.01.09


[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin