在实际环境中解释连接池

时间:2015-07-29 14:07:31

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

Rails'database.yml文件有一个设置pool: 5。我理解数据库连接池是什么,但我被一些细微之处绊倒了:

  • 使用连接然后返回其池。然后,下一个请求可以使用池中的连接,而不是创建新连接。

    1. 如何确定哪个请求获得哪个连接?
  • 假设我的并发连接限制为5,并且我的一个网页需要对数据库进行10次查询:
    1. 每个查询是一个单独的连接,还是所有10个查询都被视为一个连接?
    2. 在查询,连接或速度方面,什么可能是一个会压倒5个并发连接限制的情况的例子?
  • 假设在不同的数据库中,我将数据库连接池大小设置为5。

    1. 如果有的话,池大小和并发连接是如何相关的?
    2. 在查询,连接或速度方面,可能会有什么情况可以压倒这个池大小?

1 个答案:

答案 0 :(得分:1)

1)ActiveRecord :: Base在需要时加载连接(在请求时延迟或当前关闭/断开连接)

2)不,相同的连接将用于进行多次查询

3)如果不使用数据库供应商随db提供的诊断实用程序

,则无法回答这个问题

4)这是db供应商/适配器特定的

5)与3相同的答案。

如果您遇到速度减慢,解决这些问题的唯一方法是使用诊断工具来告知您的瓶颈在哪里。 90%的时间,它不是你的数据库或它的连接(它通常是索引,n + 1等...)

如果您没有遇到任何减速,请保留默认设置并继续。过早优化将导致过度设计的解决方案