在 database.yml 中配置:
pool: 5
有 10 个线程,执行以下代码:
author = Author.first
sql = 'some find sql'
result = Person.connection.execute(sql)
前 5 个线程都会正常执行,到第 6 个线程的时候,需要等待 5s 之后才能获取到 connection。
- 当一个线程在运行结束的时候是否需要调用 ActiveRecord::Base.clear_active_connections! 方法?
- ActiveRecord::Base.connection.execute 之类的链式调用会自动释放数据库连接吗?
- Rails 中何时会释放 connection?是由 ActiveRecord 负责吗?
参考链接:
- https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html
- https://bibwild.wordpress.com/2014/07/17/activerecord-concurrency-in-rails4-avoid-leaked-connections/