【问题标题】:How does the rails connection pooling work?Rails 连接池如何工作?
【发布时间】:2011-02-27 06:18:31
【问题描述】:

我正在运行一个 rails 2.3.5 应用程序,它支持我将 mysql 连接池化到我的数据库。但我记得读过我的杂种服务器是单线程的。对于单线程应用程序来说,拥有一个连接池有什么意义?有没有办法让我的应用程序多线程?

另外,连接池是否理解 ruby​​ 1.8 有“绿色”线程?

干杯!

【问题讨论】:

    标签: mysql ruby-on-rails connection


    【解决方案1】:

    管理连接

    对于像 Mongrel/Passenger/etc 这样的单线程服务器,连接池的主要好处是连接是在 Rails 主请求处理之外的 Rack 处理程序中建立/维护的。这允许建立一次连接而不是多次建立连接,因为它以不同的方式使用。目标是重用已建立的连接并最小化连接数。这应该可以防止必须在给定的请求处理周期内重新连接,甚至可能在请求之间重新连接(如果我没记错的话)。

    多个并发连接

    尽管大多数用例(Mongrel/Passenger)都是单线程的,并且一次只能使用一个连接 - 但 JRuby 和环境/应用程序服务器具有完整的多线程支持。 Rails 从 2.2 开始就是线程安全的

    TL;DR:

    池自动建立连接。有些人确实使用池中的多个并发数据库连接。

    【讨论】:

    • 这是否意味着如果我在 mysql 配置中有 150 个 max_connections,那么池 rails 中的每个连接创建的最大连接数为 150 个?换句话说,如果我的应用程序是唯一使用数据库的应用程序,我可以将 database.yml 中的池设置为等于 max_connections 的数量吗?
    • 只有当您拥有一个应用实例时才会如此。如果您有一个有 20 个工作人员的乘客服务器,每个工作人员都可能消耗最大池大小。
    • 是的,最坏的情况是你要确保 pool_size * num_workers
    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2015-12-17
    • 1970-01-01
    相关资源
    最近更新 更多