Utilité d'une deconnexion SQL

comparef
WRInaute impliqué
WRInaute impliqué
 
Messages: 504
Inscription: 5 Avr 2005

Utilité d'une deconnexion SQL

Message le Lun Avr 17, 2006 13:45

Bonjour,

J'ai l'habitude de mettre un "mysql_close($cbdd);" afin de me deconnecter de la base de donnée en bas de mes pages ou apres certaines requetes.

Je me pose donc la question de l'utilité de faire cela systematiquement apres avoir ouvert une connexion a une base de donnée ?

Je suppose que cela doit etre important du point de vue de la securité, peut etre aussi au niveau de l'optimisation des ressources utilisés lorsqu'on se connecte a une base de donnée ?

Merci d'avance pour votre reponse,
Robin


Szarah
WRInaute accro
WRInaute accro
 
Messages: 8093
Inscription: 22 Fév 2006

Message le Lun Avr 17, 2006 13:48

La durée de connexion doit être aussi courte que possible, ce n'est pas seulement une question de sécurité mais de nombre d'utilisateurs simultanés.

- Tu ouvres la base
- tu l'utilises
- tu la fermes aussi vite que possible.

Grantome
WRInaute accro
WRInaute accro
 
Messages: 2899
Inscription: 16 Jan 2004

Message le Lun Avr 17, 2006 13:52

Fermer une connexion à la fin de la page ne sert à rien, parceque c'est fait automatiquement.

Par contre, pour imager ce que dit Szarah :

Header
Préparation des requête SQL = ...
Connexion SQL
Res = ...
Fermeture SQL
Traitement des Res
Affichage


TOMHTML
WRInaute accro
WRInaute accro
 
Messages: 3250
Inscription: 25 Aoû 2004

Message le Lun Avr 17, 2006 14:03

oui il vaut mieux la fermer car si...
-tu ouvre ta connexion
-tu fais ta requête
-tu l'utilise
- tu fais plein d'autres trucs après mais qui n'ont plus rien à voir avec sql
-et dès que c la fin de page tu coupe ta connexion

et bien le point n°4 fait que tu as plus de chance de faire sauter la BD à cause des connexions simultannées.
donc entre le n°3 et n°4 : CLOSE ;)

comparef
WRInaute impliqué
WRInaute impliqué
 
Messages: 504
Inscription: 5 Avr 2005

Message le Lun Avr 17, 2006 16:03

OK, merci pour vos reponse,

Bonne continuation

Robin

comparef
WRInaute impliqué
WRInaute impliqué
 
Messages: 504
Inscription: 5 Avr 2005

Message le Mer Avr 19, 2006 6:18

Bonjour,

Mon probleme étant les bug liés au "too many connexion", je me posai la question suivante, ce too many connexion est-il due a trop de connexions (mysql_connect(serveur,user,passwd)) ou bien aussi a trop de requetes (mysql_db_query()) ?

Et au sujet de ce que vous m'avez dit dans les messages ci-dessus, il m'arrive de faire des traitement assez long, mais d'avoir de nouveau besoin de la base de donnée apres, est-il préférable de fermer la connection durant ce long traitement et de la réouvrir ensuite ?
Cela ferait :

-Connexion BDD (mysql_connect(serveur,user,passwd))
-Extractions et requetes diverse
-Deconnexion de la BDD (mysql_close(bdd))
-TRAITEMENT
-Connexion BDD (mysql_connect(serveur,user,passwd))
-Extractions et requetes diverse
-Deconnexion de la BDD (mysql_close(bdd))

Lorsque c'est possible je suppose qu'il faut faire tout ce qui est lié a la BDD au meme endroit, mais il arrive que cela ne soit pas possible.

Merci d'avance pour vos reponses,
Robin

Grantome
WRInaute accro
WRInaute accro
 
Messages: 2899
Inscription: 16 Jan 2004

Message le Mer Avr 19, 2006 11:58

Bah si c'est possible,

-Connexion BDD (mysql_connect(serveur,user,passwd))
-Extractions et requetes diverse
- petit TRAITEMENT
-Extractions et requetes dues au petit traitement
-Deconnexion de la BDD (mysql_close(bdd))
- Traitement


TOMHTML
WRInaute accro
WRInaute accro
 
Messages: 3250
Inscription: 25 Aoû 2004

Message le Mer Avr 19, 2006 12:05

il demande pas si c'est possible, mais ce qui est préférable.

Mais pour répondre à ta question comparef, je ne sais pas ce qui est préférable, et je serai ravi de connaitre la réponse à cette question (car j'ai à peu près le même problème)

comparef
WRInaute impliqué
WRInaute impliqué
 
Messages: 504
Inscription: 5 Avr 2005

Message le Mer Avr 19, 2006 12:18

Grantome a écrit:Bah si c'est possible,

-Connexion BDD (mysql_connect(serveur,user,passwd))
-Extractions et requetes diverse
- petit TRAITEMENT
-Extractions et requetes dues au petit traitement
-Deconnexion de la BDD (mysql_close(bdd))
- Traitement


Oui, si je n'ai pas d'autre choix je ferait comme cela, c'est a dire une sorte de pré-traitement et essayer de faire le gros du traitement apres la deconnexion.

TOMHTML a écrit:il demande pas si c'est possible, mais ce qui est préférable.

Mais pour répondre à ta question comparef, je ne sais pas ce qui est préférable, et je serai ravi de connaitre la réponse à cette question (car j'ai à peu près le même problème)

Oui, en fait je ne sait pas si une connexion consomme beaucoup donc si c'est "rentable" de faire des deconnexions / reconnexions dans une meme page

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Mer Avr 19, 2006 12:22

+ si le traitement est long
+ nbr de connexion à la base est limité
+ souvent des too many connection

=> alors oui, il vaut mieux faire une déconnexion puis une reconnexion.
En terme de perf tu perdras du temps à chaque reconx à ta base.

Dans un premier temps, ta solution la plus simple et la plus rapide en terme de devs est donc bien de gérer tes connx de la sorte.


Dans un deuxième temps, peut-être que tu auras des optimisations à faire dans ton SGBD ou dans ton SQL pour améliorer tout ça.

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Mer Avr 19, 2006 12:24

comparef a écrit:Oui, en fait je ne sait pas si une connexion consomme beaucoup donc si c'est "rentable" de faire des deconnexions / reconnexions dans une meme page


Ton pb n'est pas un pb de rentabilité. Dans la mesure ou tu as trop souvent des "too many conx", tu dois libérer tes cnx le plus rapidement possible.

comparef
WRInaute impliqué
WRInaute impliqué
 
Messages: 504
Inscription: 5 Avr 2005

Message le Mer Avr 19, 2006 12:38

Merci pour vos reponses.

ok, donc je vais opter pour le deconnexion durant les gros traitement, et des reconnexions si necessaire, en complement d'une mise en cache des pages.

Pour l'optimisation SQL, tu parle de l'optimisation de mes requetes ?


Szarah
WRInaute accro
WRInaute accro
 
Messages: 8093
Inscription: 22 Fév 2006

Message le Mer Avr 19, 2006 13:06

Dans les requêtes, il faut traquer les champs dont on n'a pas besoin ... c'est bête à dire mais ça peut faire économiser un temps fou sans parler de la charge CPU.

spidetra
WRInaute passionné
WRInaute passionné
 
Messages: 1500
Inscription: 7 Juil 2003

Message le Mer Avr 19, 2006 13:21

comparef a écrit:Pour l'optimisation SQL, tu parle de l'optimisation de mes requetes ?


Tu dois t'assurer que tes performances sont optimales :

- au niveau SGBD :
=> Ton modèle de donnée doit être nickel
=> Tu dois utiliser des index : PK, FK et colonnes candidates
=> Si ton appli et ta version de mySQL le permet utilise le cache de requêtes.

- au niveau SQL
=> tu dois essayer d'optimiser tes requêtes SQL, si elles peuvent l'être.

Récemment, sur ce forum, un pb de performance dans dotClear venait de l'absence d'index sur une clé étrangère. Ce qui est vraiment une erreur de débutant.

Dans ton cas, ça ne réglera pas directement ton pb de "too many cnx".
Mais si tu peux optimiser n'hésites surtout pas à le faire.

comparef
WRInaute impliqué
WRInaute impliqué
 
Messages: 504
Inscription: 5 Avr 2005

Message le Mer Avr 19, 2006 13:55

Ok, merci, donc je vais commencer par arreter les "SELECT * FROM..." !

Et je vais me renseigner sur les configs dont tu parle.

Utilité d'une deconnexion SQL

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité