Come per i documenti API, il ratch rails ha lo scopo di trovare e recuperare le connessioni dai thread morti. Il mietitore viene eseguito in base alla frequenza di reaping_.Reaper Reaper not working
Sto riscontrando casi in cui il numero di connessioni al database sta superando il limite specificato e ci sono connessioni in stati di inattività, ma il mietitore non sta resettando quelle connessioni. Ho provato a far funzionare il mietitore manualmente ma non sembra avere alcun effetto.
reaper = ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper.new(ActiveRecord::Base.connection, 10)
reaper.run
Che non ha alcun effetto sono stati verificati utilizzando
ActiveRecord::Base.connection.execute("SELECT * FROM pg_stat_activity WHERE pid <> pg_backend_pid()")
PgHero.total_connections
Si tratta di un bug con il mietitore in ActiveRecord o non è pensata per lavorare in questo modo? In questo caso, qual è l'opzione per scrivere un mietitore personalizzato per recuperare le connessioni non funzionanti? La gemma pg viene utilizzata per la connessione a postgres db. La query che sta mangiando le connessioni è:
MOSTRA DI ISOLAMENTO DI TRANSAZIONE LIVELLO
Rails versione: 4.2.3
versione pg gemma: 0.17.1
versionePostgres: 9.4.6
Rails app server: Puma
hai controllato il PID dei processi connessi al DB? Ti sei assicurato che non ci siano processi di rubini morti? Di solito non devi raccogliere le connessioni da solo. Fai qualche biforcazione nel tuo codice? Come è impostato il tuo puma? Avrai bisogno del giusto codice 'before_fork' /' after_fork' nella configurazione di puma. –
Puoi darci la tua configurazione puma, in particolare quanti lavoratori e fili usi? Quanto è grande la configurazione del tuo pool di connessione in 'database.yml'? – BoraMa