【问题标题】:How to release a Sequel connection when using a pool使用池时如何释放 Sequel 连接
【发布时间】:2016-11-23 08:32:47
【问题描述】:

我在使用 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 但这完全与数据库断开连接,对吗?我想确保我的工作人员释放其连接,同时不会杀死任何其他工作人员的连接。

有什么办法可以做到这一点,还是我的推理有某种缺陷?

【问题讨论】:

  • 是的,Sequel 文档没有很好地解释如何 很好地使用连接池。看起来您确实需要调用 disconnect 来释放与池的连接。我浏览了宝石,但我仍然不完全确定。

标签: ruby postgresql sidekiq sequel


【解决方案1】:

首先,您需要了解您的工作人员不一定使用单个连接,而是可能使用许多不同的连接,除非您专门通过Database#synchronizeDatabase#transaction 将其限制为单个连接。

您不需要断开特定连接,因为预计连接将保留在 Sequel 的连接池中以供以后使用。您认为应该断开连接并从池中删除连接是否有原因?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-29
    • 2014-08-06
    • 2013-05-01
    • 2016-10-24
    • 2012-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多