Rails and database connection pooling

Hi all,

I am interested to learn more about connection pooling in rails. Is there any good articles about this? I want to know specifically how is connection pooling in rails works. Does rails open one connection to the database for every user that is connected or does every user share the same database connection? Does different app server handles connection pooling differently [i.e passenger, unicorn, mongrel, thin] ? Or does app server doesn’t really care about this?

Thank you very much in advance for your help and insights.

Kind regards,
Joshua.

Hi Joshua,

Here are some facts about connection pooling that should answer your questions:

* Connection pooling is handled inside of ActiveRecord, so all
application servers should behave basically the same.

* The database connection pool starts out empty and creates
connections over time according to demand. The maximum size of this
pool defaults to 5 and is configured in database.yml.

* Requests and users share connections from this pool. A request
checks out a connection the first time it needs to access the database
and then checks the connection back in at the end of the request.

* If you use Rails.threadsafe! mode, then multiple threads might be
accessing multiple connections at the same time, so depending on the
request load you might have multiple threads contending for a few
connections.

/Nick

Hi Nick,

Thank you for the response. You mentioned that database connection
pool is created according to demand. What does that mean? Does it mean
if there are more users it will open more connection thus create more
connection pool?

Thanks heaps in advance.

Kind regards,
Joshua

Hi Nick,

Thank you for the response. You mentioned that database connection
pool is created according to demand. What does that mean? Does it mean
if there are more users it will open more connection thus create more
connection pool?

Yes. What I meant to say is that the pool starts out empty and only
grows as connections are needed up to the maximum pool size. If you
are running non-thread-safe Rails with a request mutex, chances are
that you won't create more than one connection.

/Nick

Thanks Nick. You have been really helpful. I am just trying to figure
out how this is different to connection pooling in the Java land. =)

Cheers,
Joshua.

Joshua Partogi wrote:

Thanks Nick. You have been really helpful. I am just trying to figure
out how this is different to connection pooling in the Java land. =)

Cheers,
Joshua.

Hi Joshua/Nick,
            I have one question related to multiple database session in
ruby on rails. Can I have specific database session for every user
session. So that multiple users can connect to multiple databases
dynamically. Can I use connection pooling for the same?

Thanks
Nitin.