Connection Pooling / Postgres /MySql

Hello RonR -Talk

Where should I look for connection pooling for Ruby DB access and
also connection pooling for ActiveRecord access ?

Are there any examples available ?

Maurice Yarrow

Where should I look for connection pooling for Ruby DB access and
also connection pooling for ActiveRecord access ?

Are there any examples available ?

Postgres only, and outside of Rails, but you might find pgpool interesting.

http://pgpool.projects.postgresql.org/

Hello Philip

Only Postgres ?
Do I correctly understand your response to mean: within
Rails/ActvRecd, ONLY Postgres has connection pooling support ?

If this is so, this is NOT good news for MySql access:
Why ?
Because opening plus closing a MySql connection via Ruby with
mysql-2.7 interface takes 6 milliseconds (4.5 millisec for postgres
with postgres-0.7.1 interface). This was timed out of Ruby using
Time.new, so I have to assume this is a correct number.

If connections cannot be reused for next page access, this 6
milliseconds cost right there means that a maximum of 167 pages
can be served a second, and this does NOT even include dynamic
page generation cost !!!
Whew !

Please, someone talk me out of these numbers !

Maurice Yarrow

Philip Hallstrom wrote:

Hi,

Sounds like you might be a java refuge. The concept of connection pooling is not part of Rails. A Rails application is single-threaded and to handle multiple users you need to run multiple copies of your Rails application. This might seem a bit foreign. However, these days most new Rails apps will use a cluster of Mongrel instances in production and it works quite well. Each one of them will have its own dedicated connection to the db and all session management will be done external to the app, most likely in the db itself or in a shared cache.

-Eric

Eric

Yes, actually, I host my own server at home which I have set up with a
fairly progressive configuration:

Pound-2.1.3 front end / load balancer
    forwards to:
3 Mongrel_rails clusters of 3 mongrels each (i.e., there are 3 rails
apps),
Apache 2.1.3, with mod_perl, mod_php, Apache::ASP (perl-script),
and
tomcat 5.0.28 (running 2 different apps, plus three other development
hosts)

also
postgres 8.1.4
mysql 5.0.19

Anyhow, it is reassuring (considering my question) to hear you say that
each Mongrel keeps its own open db connection. I was not aware of
this and I am glad you could explain this to me.

Of course, me being from Missouri ("show me" state), I'll probably now
go off and apply the same timing tests out of my Rails apps. (Prior timing
tests were with command-line Ruby only)

Thanks for this consise explanation

Maurice Yarrow

Eric Knapp wrote:

Eric

(errata to previous: typo correction)
The Apache I run is 2.2.3 (not 2.1.3, but the pound is 2.1.3, not that it
particularly matters...)

Maurice Yarrow

Maurice Yarrow wrote:

Hello Philip

Only Postgres ?
Do I correctly understand your response to mean: within
Rails/ActvRecd, ONLY Postgres has connection pooling support ?

Sorry... I meant that the application I linked to only works for
PostgreSQL.

And it's independant of Rails... it would work for anything that can
connect to a Postgresql databse.

If this is so, this is NOT good news for MySql access:
Why ?
Because opening plus closing a MySql connection via Ruby with
mysql-2.7 interface takes 6 milliseconds (4.5 millisec for postgres
with postgres-0.7.1 interface). This was timed out of Ruby using
Time.new, so I have to assume this is a correct number.

If connections cannot be reused for next page access, this 6
milliseconds cost right there means that a maximum of 167 pages
can be served a second, and this does NOT even include dynamic
page generation cost !!!
Whew !

Once a connection is opened in Rails it stays open through the life of the
server process so you're only opening a connection once per server
startup.