2017-11-27 3 views
0

Ich arbeite an einem Backend-System, mit dem Sie eine Abfrage schreiben und unsere DB abfragen können.Verbindungsleck (Fehler bei zu vielen Verbindungen)?

Wir haben eine maximale Anzahl von 100 Verbindungen zu unserer postgres DB und nach ein paar Abfragen haben wir einen Fehler in der DB erhalten, dass es maximiert ist.

Jetzt versuche ich herauszufinden, wie man das richtig schreibt, so ist dies kein Problem.

Hier ist mein aktueller Code:

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 

Soll ich wie das Hinzufügen von etwas sein:

ActiveRecord::Base.connection.close oder ActiveRecord::Base.connection_pool.release_connection und wo?

Antwort

1

Sie müssen Ihre Verbindungen wahrscheinlich nicht manuell verwalten.

Es gibt eine ziemlich gute document von Heroku auf Datenbank-Pools, die unabhängig von Ihrem Host gilt. Im Grunde läuft es darauf hinaus, wie viele Verbindungen Sie pro Prozess konfigurieren * die Anzahl der Prozesse. Sie müssen die Zahl von 100.

Zum Beispiel unter dem maximal sein, wenn Sie 3 Web-Prozesse haben, 2 Hintergrund Worker-Prozesse (sidekiq, resque, usw.) und jeder hatte einen Pool von 20, dann würden Sie haben a (3 + 2) * 20 = 100, erreichen Sie Ihre maximale Anzahl von Verbindungen.

Wenn Sie den Punkt erreicht haben, an dem Sie einfach mehr Verbindungen benötigen oder mehr Verbindungen benötigen, checken Sie PgBouncer.

Verwandte Themen