rails连接池如何工作?

Pra*_*nna 2 mysql connection ruby-on-rails

我正在运行rails 2.3.5应用程序,它支持我将mysql连接池连接到我的数据库.但我记得我读过我的杂种服务器是单线程的.连接池与单线程应用程序有什么关系?有没有办法多线程我的应用程序?

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

干杯!

Win*_*eld 5

管理连接

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

多个并发连接

虽然大多数用例(Mongrel/Passenger)都是单线程的,并且一次只能使用一个连接 - 但JRuby和环境/应用服务器都具有完整的多线程支持.自2.2以来,Rails一直是线程安全的

TL; DR:

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

  • 只有你有一个应用程序实例时才会这样.如果您有一个拥有20名工作人员的Passenger服务器,则每个人可能会消耗最多池大小. (2认同)
  • 是的,最糟糕的情况是你要确保pool_size*num_workers <= max_connections.在一般情况下,您将使用num_workers连接. (2认同)