database.yml 中的 pool 选项有啥用

Posted

技术标签:

【中文标题】database.yml 中的 pool 选项有啥用【英文标题】:what is the use of the pool option in database.ymldatabase.yml 中的 pool 选项有什么用 【发布时间】:2012-09-20 01:14:43 【问题描述】:

database.yml 中使用最广泛的选项如下:

adapter
encoding
database
pool
username
password
socket
host
port
timeout

我知道上面大部分的用法,但池。 所以我想知道 database.yml 中的 pool 选项有什么用,或者我们需要为流量非常大的应用程序设置任何其他参数。

【问题讨论】:

【参考方案1】:

它设置每个 ruby​​ 进程可能的连接数量。因此,如果您正在线程化您的 Rails 应用程序,或者您过度使用事务。此处的限制取决于您的设置。考虑一下:

50 个 ruby​​ 进程 每个线程有 100 个线程 一个设置为 1000 个同时连接的 mysql

因此每个进程在给定时间最多可以打开 20 个连接 (50 * 20 == 1000) 是有意义的。因此,您可以将 pool 的值设置为 20 或更少。

【讨论】:

“每个有 100 个线程”中的这 100 个在哪里适合上述等式? (50 * 20 == 1000) 这是否意味着池大小仅取决于工作进程而不取决于线程? @moritz 哦......迟到的回复,但无论如何:你是对的,只要有超过 20 个线程,100 个线程并不重要(在这种情况下)。如果将 pool 选项设置为 20,则触发查询的进程的 100 个线程将必须共享 20 个到 db 的连接。除此之外,查询将被排队。 需要这个吗?还是可以去掉?【参考方案2】:

对于正在寻找这个问题的答案的其他人来说,基本想法似乎是数据库只能支持这么多同时连接,因此需要一种方法来限制打开的连接。 pool 属性指定在给定时间可以打开的最大连接数。

有关更多信息,请参阅http://guides.rubyonrails.org/configuring.html#database-pooling。指南没有明确说池是应用程序的总连接数,但这是我阅读后的感觉。

【讨论】:

【参考方案3】:

pool是连接池大小的配置,默认为5。

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

【讨论】:

以上是关于database.yml 中的 pool 选项有啥用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 database.yml 文件中设置 rails 环境变量?

多处理模块中的 ThreadPool 与 Pool 有啥区别?

无法访问“database.yml”文件中的环境变量

Ruby on Rails database.yml 中的套接字声明是啥?

这个 database.yml 文件中的 &,<<, * 是啥意思?

Docker + Rails + MySQL =忽略database.yml中的环境变量