PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Le richieste si bloccano in PG::Connection#async_exec

Il problema è stato risolto dopo aver iniziato a ristabilire le connessioni al database. Stavamo usando sequel sul progetto e il passeggero gestisce il problema solo quando viene utilizzato ActiveRecord.

Per espanderlo, per impostazione predefinita, il passeggero utilizza lo spawn intelligente per le app Ruby. Genera prima il processo di preloader, che carica il framework e tutte le librerie. Dopo che il processo di precaricatore genera i processi di lavoro quando se ne presenta la necessità, che gestiscono le richieste. Quando si generano processi di lavoro, tutti i descrittori di file vengono ereditati dal processo di precaricatore. Quindi, se non ristabilisci la connessione al database, tutti i processi di lavoro ne condividono uno, stabilito dal preloader. Il che porta a tutti i tipi di comportamenti strani. Come le richieste che richiedono troppo tempo.

Prima di ciò, abbiamo anche spostato la gestione delle connessioni WebSocket in un processo separato. Tuttavia, non sono sicuro che abbia contribuito al problema.

Maggiori informazioni qui:

Disconnetti se si utilizza il server Web fork con il precaricamento del codice
Condivisione non intenzionale del descrittore di file
Esecuzione del server Action Cable sullo stesso host e porta, sotto un sub-URI