Fermer une connexion à une base de donnée

Fermer une connexion à une base de donnée - PHP - Programmation

Marsh Posté le 27-12-2005 à 17:28:47    

Bonjour,
 
Mon hébergeur vient de me prévenir que mon site avait un problème de connexions persistantes sur mon site :  
 
Quand on charge une page qui appelle la base de donnée,  via mysql (select) la connexion n'est pas fermée si on change de page (on devrait avoir un mysql close)
 
Mon webmaster me dit que php se charge de cette fonction automatiquement.
 
Qu'en pensez vous ? Moi je n'y connais rien !
 
Ces multiples connexions chargent le proces de la machine semble-t-il. Est ce qu'un simple mysql_close($conn); suffirait ?
 
Merci pour vos infos !!!
 
[:alizean]


Message édité par dexenium le 27-12-2005 à 17:29:40
Reply

Marsh Posté le 27-12-2005 à 17:28:47   

Reply

Marsh Posté le 27-12-2005 à 17:31:17    

En effet c'est étrange.
Un mysql_close($conn); devrait suffire

Reply

Marsh Posté le 27-12-2005 à 17:39:08    

Euh en fait il n'y a pas de "mysql_close($conn);" dans mon fichier.
 
Est-ce que php gère ça et coupe la connexion tout seul ?

Reply

Marsh Posté le 27-12-2005 à 18:07:27    

en principe, mais puisque ton hébergeur te dit que tu restes connecté...

Reply

Marsh Posté le 27-12-2005 à 18:17:13    

En effet:
 

Citation :

Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution. See also freeing resources.


 
Mais j'insiste sur la partie :
 

Citation :

usually


 
La réponse à la question se trouve dans le lien fournit dans la doc, qu'on est PRIE DE LIRE? Y COMPRIS QUAND ON Y CONNAIT RIEN:
 
Chapter 41. Persistent Database Connections
 
Il est indiqué de toujours fermer les connections ouvertes et, de manière générale, de relâcher les resources allouées plutôt que de se fier sur des effets de bords qu'on ne comprend pas et qui sont souvent limitatifs.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 27-12-2005 à 19:56:17    

Je suis d'accord avec toi, j'avais vu ce paragraphe.
 
J'ai par contre lu qu'il y a avait deux ecoles :
 
Se connecter à chaque fois induit un temps de latence mais allège le process
Garder une connection persistante est un peu plus rapide mais alourdi le process
 
Tu donnerais donc raison à la première version
 
[:axlrose]

Message cité 1 fois
Message édité par dexenium le 27-12-2005 à 19:59:24
Reply

Marsh Posté le 27-12-2005 à 20:23:05    

dexenium a écrit :

Je suis d'accord avec toi, j'avais vu ce paragraphe.
 
J'ai par contre lu qu'il y a avait deux ecoles :
 
Se connecter à chaque fois induit un temps de latence mais allège le process
Garder une connection persistante est un peu plus rapide mais alourdi le process
 
Tu donnerais donc raison à la première version
 
[:axlrose]


Non, mais en PHP, avec du mutualisé, je ne vois pas bien comment implémenter un mécanisme de connection pooling.  [:airforceone]
 
D'abord écrire du code robuste et, surtout, ne pas se faire taper les doigts par l'hébergeur, puis seulement améliorer les perfs...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 27-12-2005 à 21:11:35    

Je suis sur un dédié

Reply

Marsh Posté le 28-12-2005 à 11:14:55    

Si c'est du dédié, alors je ne vois pas vraiment où se situe le problème. C'est le principe même du connection pooling. A condition que ton pool ne gonfle pas au delà d'un certain seuil et que les connections entamées ne restent pas ouvertes éternelement (et encore là, je ne vois pas le problème).
 
Jette un oeil sur mysql_pconnect, bien que la documentation soit assez laconique à ce sujet.
 
Fais une recherche sur "php mysql connection pool" ou sur "mysql_pconnect pool".
 
Contrairement à ce qu'on trouve en J2EE, avec PHP, la question du pooling est délicate et dépend fortement de la configuration sous-jacente. Càd qu'il faut potasser la config Apache/PHP/MySQL in concreto.
 
Essaye peut-être d'en discuter avec ton hosting, de voir en quoi ça les dérange - s'agit-il de 3-4 connections ou de 50 ? Vois aussi comment les connections ouvertes pourraient se fermer après un certain temps (l'équivalent d'un pool shrink).
 
Enfin, si ça ne donne rien, fais un close et vois si l'impact de performance est mesurable / acceptable.
 
Avec du dédié, il me semble que tu peux exiger un peu plus que ça.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 29-12-2005 à 10:36:38    

J'avais tenté de faire un pooling de connexion en php/mysql mais c'est assez délicat. Généralement les mutualisés gère les connexions et peuvent attribuer x connexion par compte afin d'équilibrer les charges. Apparément cela n'est pas fait. La connexion persistante n'est plus trop accepté chez les hebergeurs et assez souvent il retire cette fonction. Avec mysqli il y a plus cette fonction. Il est quand même recommandé de gérer les deconnexions. D'utiliser le pointeur de la connexion pour les opération c'est à dire.
Exemple

Code :
  1. $rsConn = mysql_connect();
  2. ...
  3. $result = mysql_query($req,$rsConn);
  4. ...
  5. mysql_free_result($result);
  6. mysql_close($rsConn);


 
Des qu'il n'y plus besoin de la connexion coupé la. Si vous séparé l'application de l'affichage vous serrez de quoi je parle.

Reply

Marsh Posté le 29-12-2005 à 10:36:38   

Reply

Marsh Posté le 30-12-2005 à 21:21:24    

Le problème concrètement est que ces connexions persistantes chargent la machine au niveau cpu.
Donc au bout d'un certain temps j'ai des ralentissements et le serveur peut même rebooter.
Pour info j'ai entre 3000 et 4000 vis/jour chaque page de mon site appelle la bdd

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed