Thread: Connection pooling

Connection pooling

From
Guillaume Lémery
Date:
Hi,

my database has to handle quickly several number of queries per second
from numerous clients.
Because of the waste of time for connection/disconnection, Im' looking
for a connection pooling tool.

Where can I find a such tool or can somebody send me one ?

Many thanks in advance,

Guillaume.


Re: Connection pooling

From
Gilles DAROLD
Date:
Hi,

With Apache/mod_perl it is very simple to enable DB connection
persistance.

in your perl script :

use vars qw($dbh);

$dbh ||= DBI::connect($datasrc, $dbuser, $dbpwd);

That create a persistance connection to your DB and you do not have to
care
about a pool of connection. Double pipe do all for you :-)

But if you really want a pool just create an array of this kind of global
var at startup
and switch to any indices as you want.

Don't forget to use Apache::DBI on top of DBI.pm. See mod_perl
documentation
for a complete setting.

Hope this help.

Regards,


Guillaume Lémery wrote:

> Hi,
>
> my database has to handle quickly several number of queries per second
> from numerous clients.
> Because of the waste of time for connection/disconnection, Im' looking
> for a connection pooling tool.
>
> Where can I find a such tool or can somebody send me one ?
>
> Many thanks in advance,
>
> Guillaume.


Re: Connection pooling

From
Peter T Mount
Date:
Quoting Guillaume Lémery <glemery@comclick.com>:

> Hi,
>
> my database has to handle quickly several number of queries per second
> from numerous clients.
> Because of the waste of time for connection/disconnection, Im' looking
> for a connection pooling tool.
>
> Where can I find a such tool or can somebody send me one ?

What interface are you using? JDBC/ODBC/LibPQ?

Peter

>
> Many thanks in advance,
>
> Guillaume.
>
>



--
Peter Mount peter@retep.org.uk
PostgreSQL JDBC Driver: http://www.retep.org.uk/postgres/
RetepPDF PDF library for Java: http://www.retep.org.uk/pdf/

Re: Connection pooling

From
Dan Lyke
Date:
Gilles DAROLD writes:
> With Apache/mod_perl it is very simple to enable DB connection
> persistance.
>
> in your perl script :
>
> use vars qw($dbh);
>
> $dbh ||= DBI::connect($datasrc, $dbuser, $dbpwd);

Even better, Apache::DBI will pool across Perl programs, and you don't
have to change anything in your scripts.

Re: Connection pooling

From
"Brett W. McCoy"
Date:
On Thu, 25 Jan 2001, Gilles DAROLD wrote:

> Don't forget to use Apache::DBI on top of DBI.pm. See mod_perl
> documentation
> for a complete setting.

Apache::DBI is supposed to be supporting connection pooling in the near
future.

-- Brett
                                     http://www.chapelperilous.net/~bmccoy/
---------------------------------------------------------------------------
The universe seems neither benign nor hostile, merely indifferent.
        -- Sagan


Re: Connection pooling

From
Neil Conway
Date:
On Thu, Jan 25, 2001 at 01:12:48PM -0500, Brett W. McCoy wrote:
> Apache::DBI is supposed to be supporting connection pooling in the near
> future.

I believe this is scheduled (and only technically possible) with mod_perl
2.0, which will work with Apache 2.0 -- and they're both still in alpha.
So I wouldn't hold your breath...

But I agree -- mod_perl 2.0 will be really good, when it's released.

--
Neil Conway <neilconway@home.com>
Get my GnuPG key from: http://klamath.dyndns.org/mykey.asc
Encrypted mail welcomed

Good composers borrow. Great composers steal.
        -- Igor Stravinsky

Re: Connection pooling

From
Frank Joerdens
Date:
On Thu, Jan 25, 2001 at 05:14:50PM +0100, Gilles DAROLD wrote:
> Hi,
>
> With Apache/mod_perl it is very simple to enable DB connection
> persistance.
>
> in your perl script :
>
> use vars qw($dbh);
>
> $dbh ||= DBI::connect($datasrc, $dbuser, $dbpwd);
>
> That create a persistance connection to your DB and you do not have to
> care
> about a pool of connection. Double pipe do all for you :-)
>
> But if you really want a pool just create an array of this kind of global
> var at startup
> and switch to any indices as you want.

How's that supposed to work? Apache is a multi-process web server.
Connection pooling over all Apache children that are currently alive on
a web server would require some kind of inter-process communication,
which I don't think Apache supports (am I mistaken?).

Regards, Frank

Re: Connection pooling

From
Alex Pilosov
Date:
On Thu, 25 Jan 2001, Frank Joerdens wrote:

> How's that supposed to work? Apache is a multi-process web server.
> Connection pooling over all Apache children that are currently alive on
> a web server would require some kind of inter-process communication,
> which I don't think Apache supports (am I mistaken?).

That's what Apache 2.0 is about. It will be able to run in a multi-thread
mode, or in multi-process mode with some data shared via shared memory.

-alex


Re: Connection pooling

From
Frank Joerdens
Date:
On Thu, Jan 25, 2001 at 03:27:21PM -0500, Alex Pilosov wrote:
>
> On Thu, 25 Jan 2001, Frank Joerdens wrote:
>
> > How's that supposed to work? Apache is a multi-process web server.
> > Connection pooling over all Apache children that are currently alive on
> > a web server would require some kind of inter-process communication,
> > which I don't think Apache supports (am I mistaken?).
>
> That's what Apache 2.0 is about. It will be able to run in a multi-thread
> mode, or in multi-process mode with some data shared via shared memory.

Ah, that explains it. Very cool indeed!

Ta, Frank

Re: Connection pooling

From
"Valter Mazzola"
Date:
Take a look to Apache::DBI

bye
valter


>From: Frank Joerdens <frank@joerdens.de>
>To: Gilles DAROLD <gilles@darold.net>
>CC: pgsql-general <pgsql-general@postgresql.org>
>Subject: Re: [GENERAL] Connection pooling
>Date: Thu, 25 Jan 2001 20:57:33 +0100
>
>On Thu, Jan 25, 2001 at 05:14:50PM +0100, Gilles DAROLD wrote:
> > Hi,
> >
> > With Apache/mod_perl it is very simple to enable DB connection
> > persistance.
> >
> > in your perl script :
> >
> > use vars qw($dbh);
> >
> > $dbh ||= DBI::connect($datasrc, $dbuser, $dbpwd);
> >
> > That create a persistance connection to your DB and you do not have to
> > care
> > about a pool of connection. Double pipe do all for you :-)
> >
> > But if you really want a pool just create an array of this kind of
>global
> > var at startup
> > and switch to any indices as you want.
>
>How's that supposed to work? Apache is a multi-process web server.
>Connection pooling over all Apache children that are currently alive on
>a web server would require some kind of inter-process communication,
>which I don't think Apache supports (am I mistaken?).
>
>Regards, Frank

_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.


Re: Connection pooling

From
Steve Leibel
Date:
At 1:40 AM +0100 1/26/01, Valter Mazzola wrote:

>Take a look to Apache::DBI
>
>bye
>valter
>
>
>>From: Frank Joerdens <frank@joerdens.de>
>>To: Gilles DAROLD <gilles@darold.net>
>>CC: pgsql-general <pgsql-general@postgresql.org>
>>Subject: Re: [GENERAL] Connection pooling
>>Date: Thu, 25 Jan 2001 20:57:33 +0100
>>
>>On Thu, Jan 25, 2001 at 05:14:50PM +0100, Gilles DAROLD wrote:
>> > Hi,
>> >
>> > With Apache/mod_perl it is very simple to enable DB connection
>> > persistance.
>> >
>> > in your perl script :
>> >
>> > use vars qw($dbh);
>> >
>> > $dbh ||= DBI::connect($datasrc, $dbuser, $dbpwd);
>> >
>> > That create a persistance connection to your DB and you do not have to
>> > care
>> > about a pool of connection. Double pipe do all for you :-)
>> >
>> > But if you really want a pool just create an array of this kind of global
>> > var at startup
>> > and switch to any indices as you want.
>>
>>How's that supposed to work? Apache is a multi-process web server.
>>Connection pooling over all Apache children that are currently alive on
>>a web server would require some kind of inter-process communication,
>>which I don't think Apache supports (am I mistaken?).


Apache::DBI provides persistent connections within each httpd child
process.  It does not do connection pooling across httpd children.






Re: Connection pooling

From
Gilles DAROLD
Date:
Frank Joerdens wrote:

> How's that supposed to work? Apache is a multi-process web server.
> Connection pooling over all Apache children that are currently alive on
> a web server would require some kind of inter-process communication,
> which I don't think Apache supports (am I mistaken?).
>
> Regards, Frank

Of course it works, what a strange idea ? When you load a perl script with
mod_perl if you define global vars they are defined for all childrens !
Interprocess communication is an other history...


Re: Connection pooling

From
Gilles DAROLD
Date:
Hi,

Just to repeat that we have this stuff enabled using perl and mod_perl for a
very
long time. Just try to declare all your vars as global (without my or local)
and
see what's append between apache child process :-)

But as I know Apache::DBI doesn't do db connexion pooling, this is a
mistake.
It just allows you to create persitante connexion. But you can declare
multiple
persistante connection and do a random access to each one if your really
need
to play with that. Personnaly I never had to use that, but I think that with
a site
with a large amout of simoultaneous user it can be usefull.

Regards

Alex Pilosov wrote:

> On Thu, 25 Jan 2001, Frank Joerdens wrote:
>
> > How's that supposed to work? Apache is a multi-process web server.
> > Connection pooling over all Apache children that are currently alive on
> > a web server would require some kind of inter-process communication,
> > which I don't think Apache supports (am I mistaken?).
>
> That's what Apache 2.0 is about. It will be able to run in a multi-thread
> mode, or in multi-process mode with some data shared via shared memory.
>
> -alex


Re: Connection pooling

From
Steve Leibel
Date:
At 12:39 PM +0100 1/26/01, Gilles DAROLD wrote:
>Hi,
>
>Just to repeat that we have this stuff enabled using perl and mod_perl for a
>very
>long time. Just try to declare all your vars as global (without my or local)
>and
>see what's append between apache child process :-)
>
>But as I know Apache::DBI doesn't do db connexion pooling, this is a
>mistake.
>It just allows you to create persitante connexion. But you can declare
>multiple
>persistante connection and do a random access to each one if your really
>need
>to play with that. Personnaly I never had to use that, but I think that with
>a site
>with a large amout of simoultaneous user it can be usefull.



The point is that if two child processes share a connection (which is
actually just a TCP or Unix socket) then you have two writers to the
same output channel.  This is a no-no, since data corruption can
result, just as if two writers share an open filehandle for writing.

It would in theory be possible for somebody to write a connection
pool package for Apache that included proper concurrency control.
However Apache::DBI doesn't do that.

Steve L