gpt4 book ai didi

ruby-on-rails - Puma 线程如何与 Postgres 连接池交互?

转载 作者:行者123 更新时间:2023-11-29 13:17:47 25 4
gpt4 key购买 nike

我有一个在 OSE 上运行的 Rails 应用程序,5 个 pod,每个 pod 1 个容器。 Rails 应用程序使用具有默认线程设置(最小值:0,最大值:16)的 Puma Web 服务器。在我的 database.yml 中,我定义了一个连接 pool: 为 10。

我想知道我的最大 PG 连接足迹是多少?

我目前的理论是:

5 个 pod x 1 个容器 x 16 个线程 x 10 个连接池 = 800 个可能的 PostgreSQL连接

但是,我想问一下,16 个 Puma 线程是否都共享同一个 PG 连接池?在这种情况下,公式将是:

5 个 pod x 1 个容器 x 10 个连接池 = 50 个可能的 PostgreSQL 连接

(当然,如果这个数学是正确的,拥有 Puma 16 个线程将是一个问题,因为我的应用程序可能请求比可以提供的更多的连接,每个线程 1 个,比池提供的多 6 个.)

任何人都可以指出有关该主题的权威文档吗?谢谢!

最佳答案

如果连接池在进程内并跨线程分配数据库连接,如果所有数据库连接都忙则线程等待,那么第二个是正确的。如果没有,第一个。不管怎样,它实际上可能更糟。如果您使用的是滚动部署,则在重新启动时可能会有一个额外的 pod 处于事件状态。

看看在 PostgreSQL 数据库实例前使用 pgbouncer ( https://pgbouncer.github.io/ )。我的理解是,它提供了额外的灵 active ,无需在您的应用程序中执行任何操作即可管理数据库连接池,而是在 pgbouncer 中处理。

关于ruby-on-rails - Puma 线程如何与 Postgres 连接池交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46495425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com