La fermeture de la connexion mysql est-elle importante?

88

Est-il crucial de fermer efficacement les connexions mysql, ou se ferme-t-il automatiquement après l'exécution du fichier php?

John Yeary
la source
Voir aussi cette question stackoverflow.com/questions/336078/…
alex
Je suppose que la même chose s'applique à ftp_close?
doc_id
La fermeture de la connexion mysql est-elle importante? oui, c'est comme un destructeur en c ++
jasinth premkumar

Réponses:

89

De la documentation :

Remarque: Le lien vers le serveur sera fermé dès que l'exécution du script se termine, à moins qu'il ne soit fermé plus tôt en appelant explicitement mysql_close ().

Si votre script a une bonne quantité de traitement à effectuer après avoir récupéré le résultat et a récupéré le jeu de résultats complet, vous devez absolument fermer la connexion. Si vous ne le faites pas, il y a une chance 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 plus propre mais inutile de le faire explicitement.

Je ne suis pas certain de la rapidité avec laquelle le CGI affecte les choses. Une page prétend qu'une version de PHP qui prend 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.

outis
la source
Je suppose que la même chose s'applique à ftp_close?
doc_id
4
Cela signifie-t-il que si l'utilisateur ferme la page (par exemple) tôt (ou s'il y a une erreur), la connexion peut rester ouverte?
Toni Michel Caubet
1
@Toni Michel Caubet "The link to the server will be closed as soon as the execution of the script ends."Lorsque l'utilisateur ferme une page tôt, peu importe le serveur PHP. Il exécute le script comme toujours et termine le script comme toujours. Seul l'utilisateur ne verra pas le résultat.
arrowman
@ToniMichelCaubet Vous savez que php est exécuté côté serveur?
clockw0rk
1
Oui, mais vous rendez-vous compte que mon commentaire remonte à 5 ans?
Toni Michel Caubet
9

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.

ist_lion
la source
6
Eh bien, étant donné que même la page de manuel pour mysql_closedit "Utiliser mysql_close () n'est généralement pas nécessaire, car les liens ouverts non persistants sont automatiquement fermés à la fin de l'exécution du script." Je ne considérerais pas vraiment comme une mauvaise pratique de ne pas fermer la connexion.
nico
4
"Je ne vois pas pourquoi vous ne voudriez pas le fermer." Vous ne voudriez pas le fermer s'il y a une chance que vous en ayez à nouveau besoin.
Frank Farmer
1
si vous utilisez ajax alors si la connexion est fermée, chaque fois que vous essayez d'utiliser ajax, la connexion s'ouvrira et se fermera à nouveau et cela vaudra la peine de laisser la connexion ouverte au serveur et le client ne se soucie pas de la connexion ouverte ou non, il veillez à ce que le site Web soit rapide
Robert
cela peut en effet être crucial !!! si la charge du serveur est élevée et que vous avez beaucoup de connexions non fermées, comme l'a dit quelqu'un d'autre plus haut, cela peut conduire à un serveur qui ne répond pas, alors j'appellerais cela assez crucial!
oliiix le
Mieux vaut fermer. Facile et sans problème.
José Carlos PHP
4

Lorsque vous utilisez quelque chose comme cgi, il est complètement 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 comme mod_perl et autres, qui maintiennent vos connexions entre les requêtes, il est important de garder une trace des connexions, des variables globales, etc.

En gros, pour les données persistantes, nettoyez après vous-même. Pour les données triviales et non persistantes, tout disparaîtra quand la demande sera terminée. Dans tous les cas, la meilleure pratique consiste à toujours fermer vos connexions.

Jess
la source
1
Il parle de PHP, qui n'est pas persistant, donc cela ne s'applique pas.
Sasha Chedygov
2

Se ferme dès que l'exécution du script est terminée. Sauf si vous avez ouvert une connexion persistante. Idéalement, vous devriez libérer une ressource (une connexion ici) dès que vous en avez terminé avec elle. À moins qu'il y ait de bonnes chances que vous en ayez à nouveau besoin très bientôt lors de 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 équilibrez la charge, cela peut nuire à la distribution du travail. En règle générale, certains clients exécutent des requêtes lourdes tandis que d'autres exécutent des requêtes plus légères. Donc, si la même connexion est utilisée sur n over, certains serveurs subiraient une charge importante tandis que d'autres seraient sous-utilisés. Pensez à utiliser des ttls plus petits et une taille de pool de connexions variable.

neal aise
la source
1

La plupart des CMS ferment la connexion MySQL à la fin de la requête, ce qui n'a vraiment aucun sens, car PHP le fera de toute façon.

Cependant, si vous avez un script où la connexion n'est plus nécessaire, par exemple vers le milieu du script, et que d'autres activités lourdes ont lieu, alors c'est une bonne idée de fermer explicitement la connexion. Cela libérera certaines ressources.

Maintenant, on a beaucoup parlé des avantages de la fermeture d'une connexion, mais presque rien n'a été dit sur les 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. Donc, à chaque seconde, vous devrez invoquermysqli_close 100 fois - ce qui signifie que chaque seconde, vous avez 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 de pure surcharge, puisque PHP vérifiera les connexions ouvertes lorsque le script sera terminé de toute façon et fermera ces connexions, et il se peut que, parce que tout se passe si rapidement, PHP ne voit pas que vous avez fermé ces connexions et essaiera de les fermer à nouveau.

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).

Itoctopus
la source