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.