使用池时如何释放 Sequel 连接
How to release a Sequel connection when using a pool
我在使用 Sequel gem 和 Postgres 时遇到了一些合并问题。
我相信我的 Sidekiq 作业不会从池中释放它们使用的连接。
我在启动 Sidekiq 时使用以下方式连接到数据库:
DB = Sequel.connect(db_uri, max_connections: 20)
我在想一些 Sidekiq 中间件,像这样:
module Middleware
class SequelDisconnector
def call(*args)
yield
ensure
DB.release_active_pool_connection
end
end
end
我知道有 DB.disconnect
但它完全断开了与数据库的连接,对吗?我想确保我的工作人员在释放其连接的同时不终止任何其他工作人员的连接。
有什么方法可以做到这一点,或者我的推理有什么缺陷吗?
首先,您需要了解您的工作人员不一定使用单个连接,而是可能使用多个不同的连接,除非您专门通过 Database#synchronize
或Database#transaction
.
您不需要断开特定连接,因为预计连接将保留在 Sequel 的连接池中供以后使用。您是否认为应该断开连接并将其从池中删除?
我在使用 Sequel gem 和 Postgres 时遇到了一些合并问题。 我相信我的 Sidekiq 作业不会从池中释放它们使用的连接。
我在启动 Sidekiq 时使用以下方式连接到数据库:
DB = Sequel.connect(db_uri, max_connections: 20)
我在想一些 Sidekiq 中间件,像这样:
module Middleware
class SequelDisconnector
def call(*args)
yield
ensure
DB.release_active_pool_connection
end
end
end
我知道有 DB.disconnect
但它完全断开了与数据库的连接,对吗?我想确保我的工作人员在释放其连接的同时不终止任何其他工作人员的连接。
有什么方法可以做到这一点,或者我的推理有什么缺陷吗?
首先,您需要了解您的工作人员不一定使用单个连接,而是可能使用多个不同的连接,除非您专门通过 Database#synchronize
或Database#transaction
.
您不需要断开特定连接,因为预计连接将保留在 Sequel 的连接池中供以后使用。您是否认为应该断开连接并将其从池中删除?