How to manage opening and closing database connections while working with activerecords and multiple threads How to manage opening and closing database connections while working with activerecords and multiple threads multithreading multithreading

How to manage opening and closing database connections while working with activerecords and multiple threads


To prevent connection leak in multi threads, you have to manage the connection manually. You can try:

Thread.new do  ActiveRecord::Base.connection_pool.with_connection do    # Do whatever  endend

One problem of ActiveRecord::Base.connection_pool.with_connection is that it always prepare a connection even if the code inside does not need it.

We can improve it a little bit by using ActiveRecord::Base.connection_pool.release_connection:

Thread.new do  begin    # Do whatever  ensure    ActiveRecord::Base.connection_pool.release_connection  endend


if you want to run in N threads, make sure you have N connections in the pool

#  ActiveRecord::Base.connection_config#  # => {pool: 5, timeout: 5000, database: "db/development.sqlite3", adapter: "sqlite3"}

otherwise you will be able to fetch a connection from the pool.