2016-09-13 3 views
2

Я столкнулся с некоторыми проблемами с пулом с использованием Sequel gem и Postgres. Я считаю, что мои задания Sidekiq не освобождают подключения, которые они используют из пула.Как освободить соединение Sequel при использовании пула

подключиться к БД при запуске 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 но разъединяет полностью из DB правильно? Я хочу удостовериться, что мой рабочий освобождает свою связь, не убивая ни одно из соединений других работников.

Есть ли способ достичь этого или у меня есть какой-то недостаток в моих рассуждениях?

+0

Ya, Документы Sequel не очень хорошо объясняют, почему очень важно использовать пул соединений. Похоже, вам нужно позвонить 'disconnect', чтобы выпустить соединение обратно в пул. Я прошел через драгоценный камень, но я все еще не совсем уверен. – Anthony

ответ

2

Во-первых, вам необходимо понять, что ваш рабочий не обязательно использует одно соединение, но может использовать множество разных подключений, если только вы специально не делаете что-то, чтобы ограничить его одним подключением через Database#synchronize или Database#transaction.

Вам не нужно отключать определенные соединения, так как ожидается, что соединения останутся в пуле соединений Sequel для последующего использования. Есть ли причина, по которой вы считаете, что соединения должны быть отключены и удалены из пула?

Смежные вопросы