Mysql_connect

WRInaute discret
Bonjour,

J'ai développé tout un site sans utiliser mysql_close() dans mes requêtes sql et je me demandais donc si ça avait un impact sur le temps d'accès au serveur mysql ??

merci d'avance pour vos réponses :)
 
WRInaute occasionnel
ben moi j'ai lu maintes et maintes fois qu'il fallait absolument fermer ses connections mysql, mais il s'est averé qu'en test mysql_close() est plus long que si y'en a pas (logique me dirait vous). Je suppose que l'on doit sentir la différence lors de grosses montées en charges pour ne pas atteindre le nombre maxi de connexions... ce sujet m'intéresse aussi ! :D
 
WRInaute accro
c'est surtout si tu as des visiteurs, plus tôt tu fermes ta connections Mysql, plus t aura de clients simultanements sur ton site :)
 
WRInaute discret
J'ai aussi des problème de "trop de connexions sur la base" et je n'ai jamais utilisé mysql_close() dans mes scripts. Je vais d'ailleurs devoir me pencher sérieusement sur le problème avec la montée en charge de mes sites.

Si j'ai bien compris, à défaut de mysql_close(), la connexion est fermée à la fin du script. Donc pour une page rapide à traiter, pas de problème. Par contre, j'ai par exemple un script de "spider" en php qui va scanner l'ensemble des pages d'un site. Il peut tourner plusieurs minutes parfois. Ce qui signifie que si je n'ai pas utilisé mysql_close() dans la boucle, il monopolise une connexion pendant tout ce temps?

Autre question : la connexion est ouverte quand j'utilise $link = mysql_connect($host,$user,$password); ou bien lors de l'utilisation de la première requête mysql_db_query?

Dernière question. Chez mon hébergeur, j'ai droit à 3 connexions simultanées. Avec des sites totalisant 6000 visiteurs par jour max, ça devrait passer?
 
WRInaute occasionnel
Si j'ai bien compris, à défaut de mysql_close(), la connexion est fermée à la fin du script.

exactement



la connexion est ouverte quand j'utilise $link = mysql_connect($host,$user,$password); ou bien lors de l'utilisation de la première requête mysql_db_query?

lors du mysql_connect



Chez mon hébergeur, j'ai droit à 3 connexions simultanées. Avec des sites totalisant 6000 visiteurs par jour max, ça devrait passer?

pourquoi pas si ton site est bien optimisé, après si c'est du mutu, 6000v.jour c'est pas maL...

Tu devrais
1- ouvrir ta connexion
2 - faire les requetes
3 - fermer ta connexion
4 - faire les traitements et l'affichage de ta page

C'est ce qui est conseillé sur pas mal de site à fort traffic pour avoir le plus grand nombre possible de requetes mysql exécutées.
 
WRInaute discret
Merci pour tes réponses précises.

En fait, je ne suis pas du tout optimisé... Mes sites sont en général en pseudoframe, donc un fichier index.php avec des includes pour chaque page. Et comme en haut de mon index.php j'ai mis mysql_connect pour être tranquille, ça veut dire que toutes les pages ouvrent une connexion dès le début, même si ce n'est pas nécessaire...

Mais vu le boulot que ça représente de me plonger dans ces centaines de requêtes (on accumule vite en quelques années de boulot), je vais plutot me diriger vers un système de mise en cache pour l'ensemble du site je crois.
 
WRInaute accro
personnelement, j'utilise un moteur de templates
donc, je peut centrer toutes les requetes de ma page au meme endroit.
ainsi, j'ouvre une seule connection, j'execute toutes les requetes, et je referme la connection.
 
WRInaute discret
oliv63 a dit:
grosse question aussi, as tu mis des index sur tes tables ?
Oui, mais surement mal utilisée. J'ai en générale une clé primaire pour le champ id (le numéro que j'utilise dans l'url pour appeler une catégorie par exemple). Je viens de jetter un oeil sur la doc: il faut en créer pour chaque colonne frequement appelée dans des clauses WHERE, c'est ça?
Je vais creuser cette piste aussi je crois.
 
WRInaute impliqué
effectivement pour économiser des connexions simultanées, il faut :
1- mysql connect
2- select ou autre requete
3- mysql close
4- boucle et traitement des données

penser à se pencher sur :
- "index" sur des champs
- "select count" pour compter
- "explain select" pour vérifier ce que fait mysql
 
WRInaute accro
en fait, moi j'ai une fonction à la place de mysql_query(), j appelle ma fonction pour executer une requeten, qui ouvre la connexion, fais la requete, ferme la connexion, et renvoit le resultat. comme ca, plus de questions d optimisations à se poser à se poser.

par contre si tu fais des milliers de requetes dans ta page (vive les usines à gaz ^^) cette solution n est plus forcement la meilleure, mais ce cas ne devrait jamais avoir lieu
 
WRInaute impliqué
KaZhaR a dit:
personnelement, j'utilise un moteur de templates
donc, je peut centrer toutes les requetes de ma page au meme endroit.
ainsi, j'ouvre une seule connection, j'execute toutes les requetes, et je referme la connection.

Voila l'attitude inefficace à laquelle sont poussé les gens hébergés sur du mutualisé avec un nombre de connexions simultanées trop faible.

Je suppose que tu stockes les résultats de tes requêtes dans des variables temporaires. Bonjour la consommation mémoire.

Soit dit en passant, il n'y a pas besoin d'un moteur de templates pour agir de la sorte.

Ce n'est pas une critique destinée à toi, mais aux hébergeurs qui posent des limites qui n'ont aucun sens.

Idem pour le nombre de bases de données. La plupart des hébergeurs de mutualisé limitent à 1 le nombre de bases, on se retrouve souvent avec des bases de 60 ou 70 Mo, ce qui est beaucoup trop pour du mutu. Il serait plus pertinent de laisser un nombre de bases de 5 ou 10 en fixant un seuil maxi d'occupation disque pour toutes les bases.
 
WRInaute accro
des pousses au crime quoi. on vous monte la limite de connexions à 50 comme ca vous pouvez coder comme des barbares :)
 
WRInaute impliqué
e-kiwi a dit:
des pousses au crime quoi. on vous monte la limite de connexions à 50 comme ca vous pouvez coder comme des barbares :)

En quoi est-ce barbarre que d'isoler des données qui n'ont rien en commun dans des bases différentes ? C'est pourtant un principe de base de la théorie des SGBDR.

En quoi permettre d'avoir 10 connexions simultanées au SGBD est-ce barbarre ?

Moi, ce que je trouve barbare, ce sont ceux qui ne libèrent pas les pointeurs de résultat quand il n'en ont plus besoin, qui font des copies des résultats dans des tableaux juste parce qu'il faut femer la connexion au plus tôt, ceux qui ne savent pas ce qu'est un clé primaire ou encore ceux qui ne respectent aucune des formes normales.

Par rapport à ça, je ne vois pas en quoi c'est barbare de ne fermer la connexion qu'en fin de programme, une connexion ouverte consomme certainement moins de ressources que les mavaises pratiques qui précèdent. D'ailleurs, impossible de gérer correctement une transaction si on ferme la connexion au SGBD avant d'avoir fait les 3/4 des traitements susceptibles de générer une erreur.

Faut apprendre à développer proprement avant de vouloir faire de la bidouille pour plaire à son hébergeur.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut