PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Les requêtes sont bloquées dans PG ::Connection # async_exec

Le problème a été résolu après que nous ayons commencé à rétablir les connexions à la base de données. Nous utilisions sequel sur le projet, et Passenger gère le problème lui-même uniquement lorsque ActiveRecord est utilisé.

Pour le développer, par défaut, Passenger utilise le frai intelligent pour les applications ruby. Il génère d'abord le processus de préchargement, qui charge le framework et toutes les bibliothèques. Ensuite, ce processus de préchargement génère des processus de travail lorsque le besoin s'en fait sentir, qui gèrent les demandes. Lors de la création de processus de travail, tous les descripteurs de fichiers sont hérités du processus de préchargement. Donc, si vous ne rétablissez pas la connexion à la base de données, tous les processus de travail en partagent un, établi par le préchargeur. Ce qui conduit à toutes sortes de comportements étranges. Comme les demandes qui prennent trop de temps.

Avant cela, nous avons également déplacé la gestion des connexions WebSocket vers un processus distinct. Je ne sais pas si cela a contribué au problème cependant.

Plus d'informations ici :

Déconnectez-vous si vous utilisez un serveur Web Forking avec préchargement de code
Partage involontaire de descripteurs de fichiers
Exécution du serveur Action Cable sur le même hôte et port, sous un sous-URI