You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Mark Ridgway <ma...@its.monash.edu.au> on 2002/07/23 10:58:14 UTC
Terminating an HTTP process
Hi All,
We're running Mason 1.04 (Apache/1.3.22 (Solaris) mod_perl/1.26
mod_ssl/2.8.5 OpenSSL/0.9.6b) which connects to a number of Oracle
databases, so we are using Apache::DBI for connection pooling.
As we understand it, each process has its own connection pool that
lasts for the life of that process (i.e. each child collects its own
set of DB handles until it dies).
Whilst this is normally not an issue, when we experience network
problems, the number of available connections on some crucial databases
can quickly run out, which many open connections sitting idle in the
pool of various clients using other DBs, etc.
What we'd like to do is send some kind of "quit" signal to the process
so that it finishes that transaction and dies, instead of waiting until
MaxRequestsPerChild. This will ensure that DB handles for this
particular DB will not be idly pooled, but instead constantly in use.
Is there a command to do this? (e.g. like 'abort', but one that
completes the transaction successfully, and kills the child process).
(e.g. $r->die() :-)
Also, does anyone know how to get the current "RequestsPerChild"
counter (that MaxRequestsPerChild evaluates against)?
Thanks!
Mark
Re: Terminating an HTTP process
Posted by Enrico Sorcinelli <e....@pisa.iol.it>.
On Tue, 23 Jul 2002 18:58:14 +1000
Mark Ridgway <ma...@its.monash.edu.au> wrote:
> Hi All,
>
> We're running Mason 1.04 (Apache/1.3.22 (Solaris) mod_perl/1.26
> mod_ssl/2.8.5 OpenSSL/0.9.6b) which connects to a number of Oracle
> databases, so we are using Apache::DBI for connection pooling.
>
> As we understand it, each process has its own connection pool that
> lasts for the life of that process (i.e. each child collects its own
> set of DB handles until it dies).
>
> Whilst this is normally not an issue, when we experience network
> problems, the number of available connections on some crucial databases
> can quickly run out, which many open connections sitting idle in the
> pool of various clients using other DBs, etc.
>
> What we'd like to do is send some kind of "quit" signal to the process
> so that it finishes that transaction and dies, instead of waiting until
> MaxRequestsPerChild. This will ensure that DB handles for this
> particular DB will not be idly pooled, but instead constantly in use.
>
> Is there a command to do this? (e.g. like 'abort', but one that
> completes the transaction successfully, and kills the child process).
> (e.g. $r->die() :-)
>
> Also, does anyone know how to get the current "RequestsPerChild"
> counter (that MaxRequestsPerChild evaluates against)?
>
>
Hi Mark,
if you don't need persistent connections for all Oracle DBs
you can try to use some nonpersistent connections by setting
'dbi_connect_method' property to 'connect' in DBI connect
hash options:
my $dbh = DBI->connect('dbi:...',... ,{'dbi_connect_method' => 'connect'});
However I think that the right solution is a connection pool server
like SQLRealy (it work very well with Oracle, MySQL, PostgresSQL, DB2, etc)
Bye
Enrico
=========================================================
Enrico Sorcinelli - Gruppo E-Comm - Italia On Line S.p.a.
E-Mail: e.sorcinelli@pisa.iol.it - enrico@sorcinelli.it
=========================================================