![]() |
![]() |
| http://kurepin.ru/php/zametki/pconnect/ |
|
Сегодня PHP предоставляет нам выбор между двумя типами подключений к базам данных: обычное подключение и так называемое постоянное подключение (persistent connection). Хоть это и относится к различным SQL-базам, но разницы в подходе нет почти никакой; по обыкновению, мы будем рассматривать пример с MySQL. В последнее время тема постоянных соединений довольно часто поднимается на моем форуме (), хочу, как говорится, внести некоторую ясность в этот вопрос. Принципиальное отличие традиционного соединения от постоянного заключается в самом названии — "постоянное" соединение. Как же так? Ведь соединение должно закрыться после того, как 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
|