Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1734 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Fermer une connexion à une base de donnée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fermer une connexion à une base de donnée

n°1273803
dexenium
Posté le 27-12-2005 à 17:28:47  profilanswer
 

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
mood
Publicité
Posté le 27-12-2005 à 17:28:47  profilanswer
 

n°1273807
ritzle
Posté le 27-12-2005 à 17:31:17  profilanswer
 

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

n°1273809
dexenium
Posté le 27-12-2005 à 17:39:08  profilanswer
 

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 ?

n°1273823
ritzle
Posté le 27-12-2005 à 18:07:27  profilanswer
 

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

n°1273833
sircam
I Like Trains
Posté le 27-12-2005 à 18:17:13  profilanswer
 

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}
n°1273878
dexenium
Posté le 27-12-2005 à 19:56:17  profilanswer
 

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
n°1273885
sircam
I Like Trains
Posté le 27-12-2005 à 20:23:05  profilanswer
 

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}
n°1273898
dexenium
Posté le 27-12-2005 à 21:11:35  profilanswer
 

Je suis sur un dédié

n°1274000
sircam
I Like Trains
Posté le 28-12-2005 à 11:14:55  profilanswer
 

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}
n°1274321
Berceker U​nited
PSN : berceker_united
Posté le 29-12-2005 à 10:36:38  profilanswer
 

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.

mood
Publicité
Posté le 29-12-2005 à 10:36:38  profilanswer
 

n°1275146
dexenium
Posté le 30-12-2005 à 21:21:24  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Fermer une connexion à une base de donnée

 

Sujets relatifs
Réalisation d'un jeu 'sans connexion'conseils ergonomiques de base ???
Dernier enregistrement dans une base[SQL/PHP] Selectionner toute les tables d'une base
Connexion Active Directory en dynamiqueMysql : gros site : une plusieurs base ?
Base de données de mots[Java] bdd HSQL : impossible de créer une connexion (RESOLU)
Transferer une base de donnéesComment demander une confirmation avant de fermer une page...
Plus de sujets relatifs à : Fermer une connexion à une base de donnée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR