web-dev-qa-db-fra.com

La fermeture de la connexion mysql est-elle importante?

Est-il crucial de fermer l'efficacité des connexions mysql, ou est-il automatiquement fermé après l'exécution du fichier php?

78
raj

De la documentation :

Remarque: le lien vers le serveur sera fermé dès la fin de l'exécution du script, à moins qu'il ne soit fermé auparavant en appelant explicitement mysql_close (). 

Si votre script a une bonne quantité de traitement à effectuer après la récupération du résultat et a récupéré le jeu de résultats complet, vous devez absolument fermer la connexion. Sinon, il est possible que le serveur MySQL atteigne sa limite de connexion lorsque le serveur Web est soumis à une utilisation intensive. Si vous ne pouvez pas fermer la connexion MySQL avant la fin du script, il est préférable de ne pas le faire explicitement.

Je ne suis pas certain de l'impact de fastcgi sur les choses. Une page affirme qu'une version de PHP prenant en charge fastcgi créera des connexions persistantes, même pour mysql_connect. Cela contredit la documentation en ce que la connexion est fermée lorsque le processus, plutôt que le script, se termine. Plutôt que de le tester, je vais vous recommander d'utiliser mysql_close (). En fait, je recommande d’utiliser PDO , s’il est disponible.

85
outis

Est-ce crucial? Pas tellement

Est-ce considéré comme une bonne pratique à suivre? Oui.

Je ne vois pas pourquoi vous ne voudriez pas le fermer. 

9
PSU_Kardi

Lorsque vous utilisez quelque chose comme cgi, il est totalement inutile de fermer vos connexions mysql car elles se ferment automatiquement à la fin de l'exécution du script. Lorsque vous utilisez des technologies persistantes telles que mod_Perl et autres, qui maintiennent vos connexions entre les demandes, il est important de suivre les connexions, les variables globales, etc. 

Fondamentalement, pour les données persistantes, nettoyez après vous-même. Pour les données triviales non persistantes, tout disparaîtra quand la demande sera terminée. Quoi qu'il en soit, la meilleure pratique consiste à toujours fermer vos connexions.

4
jess

Se ferme dès que le script a terminé son exécution. Sauf si vous avez ouvert une connexion persistante. Idéalement, vous devriez libérer une ressource (une connexion ici) dès que vous avez terminé. Sauf s'il y a de bonnes chances que vous en ayez à nouveau besoin très bientôt dans l'exécution.

Le regroupement de connexions ou l'utilisation de connexions persistantes (si c'est ce que vous vouliez dire) est une bonne idée si vous êtes derrière un seul serveur de base de données. Cependant, s'il y a plus de serveurs et que vous répartissez la charge, la distribution du travail pourrait en pâtir. En général, certains clients exécutent des requêtes lourdes tandis que d'autres en exécutent des plus légères. Ainsi, si la même connexion est utilisée sur n over, certains serveurs rencontreraient une charge importante tandis que d'autres seraient sous-utilisés . Envisagez d'utiliser des ttls plus petits et une taille de pool de connexions variable.

2
neal aise

La plupart des CMSs ferment la connexion MySQL à la fin de la requête, ce qui n'a pas de sens, car PHP le fera quand même.

Toutefois, si vous avez un script pour lequel la connexion n'est plus nécessaire, par exemple vers le milieu du script et que d'autres activités lourdes ont lieu, il est conseillé de fermer explicitement la connexion. Cela libérera des ressources.

Maintenant, on a beaucoup parlé des avantages de la fermeture d'une connexion, mais pratiquement rien n'a été dit des avantages de ne pas la fermer. Essentiellement, si vous ne fermez pas la connexion à la fin d'un script, vous économisez vraiment des ressources. Imaginez une application Web (ou n’importe quelle application) recevant 100 pages vues/seconde. Ainsi, chaque seconde, vous devrez appeler mysqli_close 100 fois, ce qui signifie que vous disposez de 100 allers-retours inutiles vers le serveur de base de données pour fermer les connexions ouvertes. Du point de vue des performances, il s’agit d’une simple surcharge, car PHP vérifie les connexions ouvertes lorsque le script est terminé et les ferme, et il se peut que, comme tout se passe si rapidement, que PHP ne voit pas que vous avez fermé ces connexions et essayez de les refermer.

Remarque: la réponse ci-dessus suppose que vous n'utilisez pas de connexions persistantes (les connexions persistantes ne sont utilisées dans aucun des principaux CMS).

0
itoctopus