I was wondering about the following setting in the Rails database.yml:
By default the number of database connections for the connection pool of ActiveRecord is set to 5:
development:
...
pool: 5
But by default, Rails 3 is single threaded.
Why would you need 5 connections by default?
As far as I understand, a single threaded Rails app can't trigger multiple database operations at once, why would do you need to keep more connection open?
I would assume that 2 connections would make sense, so you always have one active connection even if the other one times out, but holding five connections seems a little odd to me.
Am I missing something?
In fact these default settings don't make any sense, it was fixed but then temporarily reverted (one year ago) because of the test suite.
解决方案
Quite late to the party here, but I ran out of database connections today in production.
Like a lot of people, I use Sidekiq to perform asynchronous jobs like sending emails for example. It is important to note that Sidekiq runs as a multithread process.
So, I don't just have a single-threaded Rails application, therefore this answer does not directly apply to the question asked but I thought it was worth saying something here as I think multithreaded Rails apps are relatively normal nowadays.
This means you need to adjust your pool size in such a way as to create enough connections to handle all the jobs that can be enqueued and take longer than 5 seconds (the default timeout period to wait for a database connection before throwing an error).