2017-11-27 27 views
0

私はあなたがクエリを書くことができ、私たちのDBを照会できるバックエンドシステムに取り組んでいます。接続リーク(接続が多すぎるとエラーが発生します)?

私たちのポストグルDBへの最大接続数は100です。いくつかのクエリを実行した後、最大でDBにエラーが発生しました。

これを正しく書き込む方法を理解しようとしていますが、これは問題ではありません。ここで

は私の現在のコードです:

ActiveRecord::Base.connection.closeまたはActiveRecord::Base.connection_pool.release_connectionと場所:

def in_transaction 
    connection_model.connection_pool.with_connection do 
    connection_model.transaction do 
     yield 
     raise ActiveRecord::Rollback 
    end 
    end 
end 

begin 
    in_transaction do 
    set_timeout(data_source.timeout) if data_source.timeout 
    result = select_all("#{statement}") 
    columns = result.columns 
    end 
end 

は、私のような何かを追加する必要がありますか。

答えて

1

接続を手動で管理する必要はありません。

あなたのホストに関係なく適用されるデータベースプールには、Herokuのかなり良いdocumentがあります。基本的には、プロセスごとに構成する接続の数*プロセスの数です。あなたが3ウェブプロセス、2バックグラウンドワーカープロセス(sidekiq、resqueなど)を持っており、それぞれが20のプールを持っていた場合、あなたが持っているだろう、例えば100

のあなたの最大の下にその数を必要とします(3 + 2) * 20 = 100、最大接続数に達しました。

もっと多くの接続が必要な場合やもっと多くの接続が必要な場合は、PgBouncerを確認してください。

関連する問題