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

Problème de pool de connexion

Voici le flux d'événements pour illustrer ce qui se passe :

  1. Une connexion est demandée et utilisée par l'appelant (application ou pool de connexion)
  2. L'appelant conserve une référence à celui-ci afin que la connexion puisse être réutilisée
  3. L'appelant traverse une période d'inactivité (par exemple, un système de développement pendant la nuit ou un système d'assurance qualité pendant le week-end).
  4. Une fois que cette connexion à la base de données n'est pas utilisée, la base de données considère la connexion comme inactive. Parce qu'elle est inactive, après un certain temps (la valeur par défaut de MySQL est de 8 heures), la base de données ferme la connexion.
  5. L'appelant a toujours un contrôle sur la connexion, et lorsqu'il essaie à nouveau d'utiliser la connexion, il découvre de manière désagréable que la connexion a été fermée.

La raison pour laquelle autoReconnect=true fonctionne, et que le pool teste la validité de la connexion fonctionne, est que vous demandez au système appelant de tester la connexion pour cette situation et de réessayer si cette situation se produit.

Quant à savoir si la requête de validation affectera les performances :en théorie, elle utilise une connexion pour faire quelque chose. En pratique, quelque chose est si insignifiant que son effet est négligeable dans le contexte de l'ensemble de votre système.

[MODIFIER]

Dans ce cas, Apache DBCP est le pool de connexions suspendu à la connexion, mais vous ne voulez PAS que DBCP ferme la connexion après chaque appel. L'intérêt du pool de connexions est de maintenir une connexion prête pour le prochain appel, car la création de connexions coûte cher. Les objets de connexion gérés par le pool sont soutenus par des connexions de base de données réelles, et la base de données est celle qui ferme cette connexion réelle après le délai d'inactivité. Notez que le délai d'attente pour fermer les connexions inactives est configuré sur la base de données, pas sur le pool de connexions. Pour cette raison, DBCP n'a aucun moyen de savoir si la connexion a été fermée ou non, à moins qu'il n'essaie réellement de s'y connecter. C'est pourquoi vous avez besoin d'une requête de validation.

Pour plus d'informations sur la configuration de DBCP, consultez la page de configuration et la documentation API .