Re: What is wrong with pg_pconnect() ? - Mailing list pgsql-php

From Rod K
Subject Re: What is wrong with pg_pconnect() ?
Date
Msg-id KNEPILBLIADCDMMPIKIKEEGPDNAA.rod@23net.net
Whole thread Raw
In response to What is wrong with pg_pconnect() ?  ("Sylvain Ross" <jfk@fleming.u-psud.fr>)
List pgsql-php
Your apache process shouldn't be dying after the keep alive timeout and
probably isn't. Which is why the pg process isn't dying, it is still
connected to the apache child that made the connection.  What you want to
look at in httpd.conf is MaxRequestsPerChild.  That is the number of
non-keep alive requests the child will handle before dying.  If "0" then it
won't die due to number of requests.  So, in your scenario, that child only
handled one request (subsequent requests via keep-alive don't count).  That
connection will remain open until the apache child dies or pg times out the
connection.

The various *_pconnect functions in PHP are powerful but not suited to all
purposes.  If your web server handles a lot of static pages, images and even
dynamic pages that don't connect to the DB then persistent connections
aren't necessarily a good solution.  The other place they REALLY suck is on
a shared server.  Imagine 50 different clients using persistent connections
to the DB.  If persistent connections are used, it is entirely possible that
each apache child has 50 different connections to the DB due to the fact
that each client is probably using different parameters to connect
(different PG users).  Now multiply 50 connections by the number of apache
children!  Your server will come to it's knees rather quickly.  I've told a
number of hosting providers to turn off the persistent connection functions.



> -----Original Message-----
> From: pgsql-php-owner@postgresql.org
> [mailto:pgsql-php-owner@postgresql.org]On Behalf Of Sylvain Ross
> Sent: Monday, December 15, 2003 3:10 PM
> To: pgsql-php@postgresql.org
> Subject: [PHP] What is wrong with pg_pconnect() ?
>
>
> Hi,
>
> I read a few sites (including php.net, article about db persistent
> connections) speaking about the adventage of pg_pconnect() php function...
>
> I got a "big" problem with pconnections made with the pg_pconnect
> function.
> The problem is the following :
>
>
> I'm using a stable debian with:
> apache 1.3.26
> php 4.1.2
> postgres 7.2
>
> (I know some guys thinks those are old versions... no, it's just debian
> stable versions ;))
>
>
> So , here is the pb :
>
> - A client connects for the first time to my httpd and load a script which
> contain a pg_pconnect() call, what create a pgsql process... so
> far so good
> ...
>
> - As my httpd is in keepalive mode (wiuth a keepalive_timeout of 15 secs),
> if the user loads another page with an other pg_pconnect() call (with the
> same parameters as the first pconnect()), it uses the same pgsql process
> created before. Cool ! pconnect is great !
>
> - BUT, when the keepalive times out, the dedicated apache process
> dies (what
> is normal), BUT the pgsql thread is still alive ! with "idle" state !
>
> Of course, since the related apache process has died, this idling pgsql
> process will stay in memory for ever ! won't be reused ever !
>
> I don't know how to deal with this ! If the pgsql forked-process where
> killed when apache forked-process die, all should be OK ! but it
> does not :(
>
>
> Tell me if there are any solutions...
>
> Thanks in advance.
>
> Sylvain
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
>                http://archives.postgresql.org
>
>



pgsql-php by date:

Previous
From: "Thom Dyson"
Date:
Subject: Re: A progress page with PHP + PostgreSQL
Next
From: "scott.marlowe"
Date:
Subject: Re: What is wrong with pg_pconnect() ?