database.yml中的pool选项有什么用?

41

数据库配置文件database.yml中最常用的选项如下:

adapter
encoding
database
pool
username
password
socket
host
port
timeout

我知道大部分的用法,但不了解pool的作用。 因此,我想知道在database.yml中pool选项的用途是什么,或者是否有其他参数需要设置,适用于高流量的应用程序。

3个回答

35

它设置了每个 Ruby 进程可能的连接数量。因此,如果您正在对 Rails 应用进行线程化处理,或者您过度使用事务,则这里的限制取决于您的设置。考虑以下情况:

  • 50 个 Ruby 进程
  • 每个进程有 100 个线程
  • 一个 MySQL 设置为最多同时连接 1000 个

因此,在任何给定时间内,每个进程最多可以打开 20 个连接(50 * 20 == 1000)。因此,您需要将 pool 值设置为 20 或更低。


“每个都有100个线程”中的100在上述方程式中的哪里?(50 * 20 == 1000) - Nadeem Yasin
1
这是否意味着池大小仅依赖于工作进程而不是线程?@moritz - Nadeem Yasin
哦...晚回复了,但无论如何:你是对的,只要有超过20个线程(在这种情况下),那么100个线程并不重要。如果您将池选项设置为20,则触发查询的进程的100个线程将必须共享20个连接到数据库。除此之外,查询将排队等待。 - moritz
这需要吗?还是可以删除? - Jenuel Ganawed

4
对于其他人寻找答案的人,基本思路似乎是数据库只能支持有限数量的同时连接,因此需要一种方式来限制打开的连接。 pool 属性指定可以在给定时间内打开的最大连接数。
有关更多信息,请参见http://guides.rubyonrails.org/configuring.html#database-pooling。该指南并没有明确说明池是应用程序的总连接数,但这是我阅读后得到的感觉。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接