41

Most widely used options in database.yml are of following :

adapter
encoding
database
pool
username
password
socket
host
port
timeout

I know the use of the most of the above but pool. So i want to know what is the use of the pool option in database.yml or there is any other parameter which we need to set for the application having very heavy traffic.

Charles
  • 50,943
  • 13
  • 104
  • 142
Salil
  • 46,566
  • 21
  • 122
  • 156

3 Answers3

35

It sets the amount of possible connections per ruby process. So in case you are threading your rails app, or you use transactions excessively. The limits here depend on your setup. Consider this:

  • 50 ruby processes
  • each with 100 threads
  • a mysql with a setting of 1000 simultaneous connections

so it makes sense that every process can open at most 20 connections (50 * 20 == 1000) at a given time. So you would set the pool value to 20 or less.

moritz
  • 25,477
  • 3
  • 41
  • 36
  • where does this 100 in "each with 100 threads" fit in the above equation? (50 * 20 == 1000) – Nadeem Yasin Jul 22 '15 at 12:33
  • 1
    Does it mean that pool size is dependent only on worker process and not the threads? @moritz – Nadeem Yasin Jul 22 '15 at 12:33
  • Oh ... late reply but anyhow: You are right, the 100 threads don't really matter as long as there are more than 20 (in this case). If you set the pool option to 20, then the 100 threads of a process to trigger a query will have to share 20 connections to the db. Beyond that, queries will be queued. – moritz May 30 '19 at 05:22
  • is this needed? or it can be removed? – Jenuel Ganawed Apr 02 '20 at 01:10
4

For anyone else who is looking for an answer to this question, the basic idea seems to be that a database can only support so many simultaneous connections, so there needs to a way to limit the open connections. The pool attribute specifies the maximum number of connections that can be opened at a given time.

See http://guides.rubyonrails.org/configuring.html#database-pooling for more information about this. The guide doesn't explicitly say that pool is the total connections for the app, but that's the sense I get after reading it.

WebDev
  • 1,097
  • 8
  • 6
1

pool is the config of size of connection pool, which is 5 by default.

http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html

xdazz
  • 158,678
  • 38
  • 247
  • 274