quand fermer la connection à connexion Mysql ?

Petit nouveau ! | 2 Messages

31 juil. 2009, 15:45

Bonjour, je me pose une petite question de performance :

Sur une page éxécutant en moyenne une dizaine de requêtes sur un hébergement mutualisé, est-il mieux de se connecter / se deconnecter à chaque requête, ou se connecter au début du script et couper la connexion à la fin ?
Pour le moment je pratique la première méthode, par peur de dépasser le nombre de connctions simultanées autorisé si le nombre de visiteurs augmente. Mais je ne suis pas sûr d'avoir raison, je pourrais avoir quelques avis s'il vous plais ?

Merci d'avance :D

Mammouth du PHP | 2937 Messages

31 juil. 2009, 15:57

Le premier conseil qu'on puisse donner, c'est d'éviter les connexions persistantes. Autrement dit, utiliser la fonction mysql_connect() plutôt que mysql_pconnect(), par exemple ; ou bien, avec PDO, ne pas utiliser la valeur PDO::ATTR_PERSISTENT lors de l'instantiation d'un nouvel objet PDO.

Le deuxième conseil consiste à clore la connexion quand on n'en a plus besoin, avec mysql_close() ou bien, avec PDO, en détruisant l'objet PDO comme suit :
// Nouvel objet PDO
$pdo = new PDO ('mysql:host=localhost;dbname=ta_base', 'root', 'root');

// Qui est à présent détruit
$pdo = null;
Un autre conseil fort utile consiste à libérer les ressources lorsqu'on n'a plus de besoin d'effectuer des requêtes SQL, au moyen de mysql_free_result() (je n'en ai pas trouvé d'équivalent en PDO, mais le conseil précédent suffit).[/php]

Eléphant du PHP | 111 Messages

31 juil. 2009, 15:57

L'ouverture / fermeture de connexions à une base de données est lourde, en général (plus vrai sous oracle que sous mysql).

Tu coupes la connexion après exécution de toutes les requêtes, c'est beaucoup plus performant.

Et si tu utilises PDO, il me semble qu'il y a moyen de conserver une connexion constamment ouverte fournie à PDO, ce qui est nettement plus rapide.

Eléphant du PHP | 245 Messages

31 juil. 2009, 16:17

oui, on ouvre la connexion en debut de script et on la ferme en fin de script, enfin quand on n'en a plus besoin.
C'est inutile dans 99,9% des cas d'avoir plus d'une ouverture de connexion par script.

Pour un comparatif, les requete se suivent, c'est un peu comme dans un demenagement.
Il y a une suite de déménageurs qui vont du rez de chaussé à ton etage pour deposer et enlever des paquets.

te connecter à chaque requete équivaudrait alors au fait suivant :

chaque demenageur ouvre la porte de chez toi, enleve ou prend le paquet puis ferme la porte à clef. Puis le demenageur suivant ressort la clef de sa poche, ouvre la porte enleve/prends le paquet puis referme la porte à clefs, etc...

Bref, cela ralentit enormement le script.

Il faut ouvri la porte au debut du demenagement et ne pas oublier de la refermer à la fin.

Si tu execute un script qui dure deux jour avec une requete courte le premier jour et une requete courte le second, bah dans ce cas extreme, ouais, vaudrait mieux ouvrir la connexion à chaque fois, (mais je ne connais pas de cas comme ça en fait...)

Petit nouveau ! | 2 Messages

31 juil. 2009, 16:23

Merci pour vos réponses. Je vais donc modifier mon script pour qu'il n'y ai plus qu'une connection pour toute les requetes de la page.

Mais chez mon hébergeur, le nombre de connections à Mysql simultanées autorisées est très retreint (genre 3 ou 4 je ne sais plus au juste). Cela ne risque pas de poser des problème en cas de forte affluence sur le site ?

Eléphant du PHP | 111 Messages

31 juil. 2009, 16:27

Non ça ira ^^.

STunisino
Invité n'ayant pas de compte PHPfrance

05 févr. 2010, 16:17

salut et bonjour a tous

je voudrais s'avoir comment je peut tenir une connection ouverte en sachant que ma connection s'effectue a travers une fonction ??
j'ai 2 fonction A et B
dans A est la connection
quand je fait des requete dans la fonction B une erreur me dit qu'il y'a pas de lien ouvert !

pouvez vous m'aider SVP

ViPHP
ViPHP | 5462 Messages

05 févr. 2010, 16:20

montre ton code
Modifié en dernier par stealth35 le 08 févr. 2010, 16:21, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 févr. 2010, 12:08

Modération :
Si tu as une autre proposition ouvre un nouveau sujet,
cela te permettra d'avoir plus de réponses.

En plus, tu pourras mettre [Adopté] dès que ta proposition évoquée ici sera prise.

Merci de prendre le temps de lire les règlements.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer