Connexion MySQL, puis-je le laisser ouvert?
Est-il intelligent de garder la connexion ouverte tout au long de l'ensemble de la session?
J'ai fait une application en C# qui se connecte à une base de données MySql, le programme des lectures et des écritures et l'application doit être en cours d'exécution d'environ 10 heures par jour non-stop.
Il n'existe aucun risque de garder la connexion ouverte au lieu d'appeler la fonction close() à chaque fois après que vous avez arraché quelque chose à partir de la base de données et de les ouvrir à nouveau lorsque vous avez besoin quelque chose de nouveau?
source d'informationauteur Pieter888
Vous devez vous connecter pour publier un commentaire.
Laissant une connexion ouverte pour un moment est bien, aussi longtemps que:
vous ne disposez pas de beaucoup simultanément les connexions inactives que vous frappez la connexion MySQL limite;
vous n'avez pas la laisser ouverte pour heures sans rien faire. La valeur par défaut de MySQL connexion
wait_timeout
est de 8 heures; laisser une connexion inactive pendant longtemps et que la prochaine fois que vous venez à utiliser, vous obtiendrez un “MySQL server has gone away” erreur.Depuis que vous utilisez ADO.NET, vous pouvez utiliser ADO.NET's intégré le regroupement de connexion capacités. En fait, permettez-moi de peaufiner ce: vous doit toujours utiliser ADO.NET's intégré connexion fonctionnalités de mise en commun. Ce faisant, vous obtiendrez la .NET pour gérer en toute transparence vos connexions pour vous dans le fond. Il va garder les connexions ouvertes pour un certain temps, même si vous avez fermé entre eux et de les réutiliser si vous ouvrez une nouvelle connexion. C'est vraiment des trucs rapides.
Assurez-vous de mentionner dans votre chaîne de connexion que vous souhaitez connexions regroupées comme il pourrait ne pas être le comportement par défaut.
Vous avez seulement besoin de créer des connexions au niveau local lorsque vous avez besoin d'eux, car ils sont mis en commun dans le backrgound donc il n'y a pas de surcharge lors de la création d'une nouvelle connexion:
C'est la façon dont vous êtes censé le faire .NET.
Si l'application utilise la connexion il n'y a pas de raison de le fermer. Si vous n'avez pas besoin de la connexion la plus proche. Si vous avez plusieurs applications de se connecter à la base de données, vous disposez d'un nombre fixe de connexions à la base de données. C'est pourquoi il est préférable de fermer lorsque vous avez terminé et rouvrir quand vous en avez besoin.
À partir d'un point de vue sécurité, je dirais qu'il vaut mieux la fermer au bout d'une requête, juste pour être sûr qu'aucun autre programme ne peut injecter ses propres choses dans l'ouverture de la connexion.
Que la performance est conered, il est clairement préférable d'avoir la connexion ouverte à travers tout le temps.
Votre choix^^
Non, je ne vois pas pourquoi ne pas laisser une connexion ouverte et ré-utiliser: après tout, c'est l'ensemble de point derrière les différents connexion-piscine technologies qui sont propos (bien que ceux-ci sont généralement réservés pour le multi-thread situations où les œuvres sont toutes d'exploitation sur la même source de données).
Mais, pour étoffer la réponse par bobince, - seulement dans la mesure où vous n'êtes pas la fermeture de la connexion, ne supposez pas que quelque chose d'autre ne sera pas: la connexion timeout, il pourrait y avoir des problèmes de connexion ou de mille et une autres raisons pour lesquelles votre connexion meurt. Vous devez supposer que la connexion peut ne pas être là, et ajouter de la logique de code pour cette exception-cas.
Il n'est pas une bonne pratique à mon avis de garder les connexions ouvertes.
Un autre aspect qui parle de la fermeture de connexions à chaque fois est évolutivité. Il pourrait être bien de le laisser ouvert mais que faire si votre application est utilisée par deux fois à 3 fois la quantité d'utilisateurs. C'est une douleur dans le cou de revenir en arrière et modifier tout le code. (je sais je l'ai fait 🙂
Votre problème sera résolu, si vous utilisez le regroupement de connexion dans votre code. Vous n'avez pas besoin d'ouvrir et de fermer la connexion de sorte que vous économiser de précieuses ressources qui sont utilisées lors de l'ouverture d'une connexion. Vous avez juste retour de la connexion à une piscine quand on vous demande une connexion retourne une connexion inactive.
Bien sûr, je suis d'avis, d'obtenir une instance de la connexion, l'utiliser, commit/rollback votre travail et de le retourner à la piscine. Je ne voudrais pas vous suggérons de garder la connexion ouverte depuis si longtemps.
Une chose que je n'ai pas vu dans les autres réponses, encore: Dans le cas où vous avez préparé des déclarations ou des tables temporaires, ils peuvent bloquer les ressources du serveur jusqu'à la fermeture de la connexion. Mais d'un autre côté, il peut être utile de garder la connexion depuis un certain temps au lieu de recréer à chaque quelques instants.
Vous aurez à payer une pénalité de performances si vous êtes constamment d'ouverture et de fermeture des connexions. Il peut être judicieux d'utiliser la connexion d'une mutualisation et d'un court
wait_timeout
si vous êtes préoccupé par le fait que de nombreuses copies en cours d'exécution de votre application va vous manger trop de connexions de base de données.Oui, vous pouvez, à condition:
Fondamentalement, il exige beaucoup d'attention à l'échec des cas et la récupération correcte; la connexion et la déconnexion est souvent beaucoup plus facile.
Je pense, si il y a une connexion mécanisme de mise en commun, vous feriez mieux de fermer la connexion.
Une raison c'est que vous n'avez pas besoin de re-vérifier si votre connexion est toujours en vie ou pas.