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

Essayer de mettre à jour 640 000 lignes dans MySQL obtient une connexion perdue au serveur MySQL lors de la requête

Il existe une autre raison potentielle à cette erreur, à savoir le pool de connexions ActiveRecord moissonneuse . Lorsqu'il est activé, le moissonneur analyse le pool de connexions à la recherche de connexions "mortes" et les ferme. Lors de mes tests, il semble être trop zélé et ferme également des connexions parfaitement actives (généralement celles qui exécutent des requêtes légèrement plus importantes).

Essayez d'effacer reaping_frequency à partir de votre configuration de base de données (qui l'éteint) et voyez si cela aide. Analysez votre base de code pour cette chaîne et assurez-vous qu'elle n'est pas définie (ou simplement supprimée !). Si vous voyez une ligne comme config['reaping_frequency'] = ENV['DB_REAP_FREQ'] || 10 , sachez que le || 10 définit en fait une valeur par défaut basse de 10 s. Ce modèle était dans la base de code rails pendant un certain temps, jusqu'à ce que le changement soit inversé en raison de divers problèmes, y compris tuer les requêtes longues , mais est toujours recommandé par Heroku .

Si la désactivation de la moissonneuse résout les problèmes, je recommanderais de la laisser désactivée. Rails ne le définit plus par défaut, et il semble causer plus de problèmes qu'il n'en résout.

J'ai eu une erreur comme la vôtre, et c'est comme ça que je l'ai corrigée. Personnellement, je le garde désactivé. J'ai décrit mon problème spécifique plus en détail sur mon blog .