Maximum de connexion MySql aurorisées, comment faire?

Consultez la formation à Google Analytics de WebRankInfo / Ranking Metrics


jeromax
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 12 Nov 2003

Maximum de connexion MySql aurorisées, comment faire?

Message le Lun Sep 06, 2004 12:50

Salut,
j'ai posé cette question sur le forum d'OVH mais pas eut de réponses satisfaisantes...
Voila mon problème:
OVH autorise 3 connexion MySql simultanée maxi.
Comment faire pour ne JAMAIS avoir d'erreurs?
Voila le code que je me suis fait:
Code: Tout sélectionner
function execRequete($pRequete){
    $w1="???";
    $w2="???";
    $w3="???";
    $dataBase="???";
    $i=0;
    do{
        if(!$idReq = mysql_connect($w1,$w2,$w3)){sleep(1);}
        $i++;
        if($i>10){die("Erreur...");}
    }while (!$idReq);
    $result=mysql_select_db($dataBase);
    $retour=mysql_query($pRequete);
    mysql_close($idReq);
    return $retour;
}


J'ai environ 200 visiteurs par jour, ce qui n'est pas énorme, mais je rencontre quand même les problèmes de max_connexion.
Les personnes qui ont des sites ENORMES (genre wri :wink: ) peuvent-ils me dire la technique employée (même chez un autre hébergeur) pour effectuer leurs requetes?
Quelle est la solution optimale?
Comment faites-vous pour gérer les connexions simultanées?
Merci

PS1: Les "@" devant les noms de fonctions ne sont pas une solution pour moi.
PS2: Je ne veux pas utiliser de cache pour éviter les requètes redondantes, c'est vraiment la manière de gérer l'attente d'accès à la base qui m'interresse.

Tex
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

Message le Lun Sep 06, 2004 13:00

tu peut essayer de te connecter en persistant avec mysql_pconnect()

peut etre que ça gérera mieux l'acces aux fils mysql dans la mesure ou avec ça tu peut utiliser une connexion deja ouverte


mais bon 3 connexions...c'est vraiment pas cool


jeromax
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 12 Nov 2003

Message le Lun Sep 06, 2004 13:05

bah non... le max_connexion serait atteint encore plus vite.
Quel est le code que vous utilisez? pleaaaaaaaaaaase...

Si c'est super confidentiel tant pis...
Je vais pleurer et pis c'est tout... :wink:

Mies Van der Rohe
WRInaute passionné
WRInaute passionné
 
Messages: 1562
Inscription: 7 Déc 2002

Message le Lun Sep 06, 2004 13:08

autrement si tu avais vraiment beaucoup de connexions mettre tes pages en cache est une bonne solution


jeromax
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 12 Nov 2003

Message le Lun Sep 06, 2004 13:11

:arrow: voir le deuxième PS
(bah oui j'avais déjà un peu réfléchi au problème :wink: )

Tex
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

Message le Lun Sep 06, 2004 13:13

jeromax a écrit:bah non... le max_connexion serait atteint encore plus vite.
Quel est le code que vous utilisez? pleaaaaaaaaaaase...


pas forcemment, puisque les connexions ouvertes peuvent etre réutilisées directemment sans nouvelle ouverture.

avec un connect simple il arrive souvent que la latence dans le process de fermeture d'un fils provoque une cascade d'ouvertureen surplus et ainsi un trop de connexion ouvertes pour l'usage reel, alors qu'en pconnect tu utilise 100% de tes connexions.


jeromax
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 12 Nov 2003

Message le Lun Sep 06, 2004 13:16

Ah je ne savais pas ça.
Mais euh.... OVH ne l'autorise pas...


pipologue
WRInaute impliqué
WRInaute impliqué
 
Messages: 592
Inscription: 27 Mai 2004

Message le Lun Sep 06, 2004 13:23

do{
if(!$idReq = mysql_connect($w1,$w2,$w3)){sleep(1);}
$i++;
if($i>10){die("Erreur...");}
}while (!$idReq);

Ca c'est une belle connerie...


jeromax
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 12 Nov 2003

Message le Lun Sep 06, 2004 13:25

pipologue a écrit:do{
if(!$idReq = mysql_connect($w1,$w2,$w3)){sleep(1);}
$i++;
if($i>10){die("Erreur...");}
}while (!$idReq);

Ca c'est une belle connerie...

Je suis content de te l'entendre dire, mais ça ne m'avance guère...

Tex
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

Message le Lun Sep 06, 2004 13:26

bon bha ya au moins 2 raisons dans ce thread qui me coupe definitivement toute envie d'aller chez ovh :)

jeromax: ma technique a moi c'est d'etre chez sivit :)


George Abitbol
WRInaute passionné
WRInaute passionné
 
Messages: 1923
Inscription: 6 Juin 2003

Message le Lun Sep 06, 2004 13:35

jeromax a écrit:Je suis content de te l'entendre dire, mais ça ne m'avance guère...


Tu dois :

- ouvrir ta connexion juste avant d'en avoir besoin
- faire toutes tes requêtes
- et fermer le plus tôt possible

Le plus tôt possible, ça veut dire que si tu as une requête puis une boucle sur les résultats, tu peux fermer la connexion AVANT la boucle. Si tu en as plusieurs à faire, tu exécutes tes différentes requêtes, tu fermes la connexion et ensuite tu récupères tes résultats en étant déconnecté.

Fred


jeromax
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 12 Nov 2003

Message le Lun Sep 06, 2004 13:44

Merci, mais c'est ce que je fais: regarde ma fonction, je lui fait retourner le résultat
Code: Tout sélectionner
return $retour;

Je ne parcours les résultats qu'une fois la connection fermée.
Par contre c'est vrai que pour le moment, j'ouvre une connexion à chaque requete (conseillé par les forumeurs d'OVH).

Je ne le faisais pas, puisque je suis obligé de concaténer mes requètes (séparées par un caractère à la noix) puis de faire un split dessus pour les exécuter une par une.
par exemple, si j'update plusieurs table, je ne peux faire
Code: Tout sélectionner
mysql_query("update table1....;update table2...;etc...");

Car mysql_query n'exécute que la première requète (php4)
La dessus, personne n'a pu me dire pourquoi...

jeroen
WRInaute passionné
WRInaute passionné
 
Messages: 2461
Inscription: 30 Aoû 2002

Message le Lun Sep 06, 2004 13:47

200 visiteurs par jour, ça fait une moyenne de 1 connexion toutes les 400 secondes....
T'as forcèment un preblème de requête qq part...

George Abitbol a écrit:Tu dois :

- ouvrir ta connexion juste avant d'en avoir besoin
- faire toutes tes requêtes
- et fermer le plus tôt possible

Le plus tôt possible, ça veut dire que si tu as une requête puis une boucle sur les résultats, tu peux fermer la connexion AVANT la boucle. Si tu en as plusieurs à faire, tu exécutes tes différentes requêtes, tu fermes la connexion et ensuite tu récupères tes résultats en étant déconnecté.
Fred


Fais ça et fait des test en même temps : calcul le temps exact de tes requête sql

Tex
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 449
Inscription: 9 Juil 2004

Message le Lun Sep 06, 2004 13:53

jeromax a écrit:par exemple, si j'update plusieurs table, je ne peux faire
Code: Tout sélectionner
mysql_query("update table1....;update table2...;etc...");

Car mysql_query n'exécute que la première requète (php4)
La dessus, personne n'a pu me dire pourquoi...


tout simplement par soucis de sécurité, sur un script de recherche tout simple par exemple il suffirait de coder dans le formulaire un code d'echapement pour sortir de la premiere requete et ensuite de rajouter ";delete from nom_de_la_table_au_hasard_ou_trouvé_en_provocant_une_erreur_mysql" pour tout effacer sur le site ...


jeromax
WRInaute passionné
WRInaute passionné
 
Messages: 1110
Inscription: 12 Nov 2003

Message le Lun Sep 06, 2004 14:04

Merci Tex !
Donc tout le monde concatène ses requètes puis les redécoupe?

Sinon pour mon autre problème, je vais faire des tests en concaténant les requètes et voir comment ça se passe.
Donc si j'ai 4 personnes qui tente d'accéder en même temps, j'aurai forcément un plantage?
Pourquoi pipologue dit que ma fonction est une belle connerie?
Je tente une connexion jusqu'à ce qu'elle se fasse, c'est pas bête ça non?
En tous cas, j'ai bcp moins d'erreur dans mes logs qu'avant avec cette méthode.
De temps en temps je compare mes logs:
ex: j'ai une table qui stocke les visiteurs par jour et une autre par mois (juste le nombre)
En faisant un SUM sur ma première je dois normalement retrouver le résultat dans la deuxième. Et bien avec cette fonction je n'ai que rarrement des écarts, alors qu'avant...

Si je ne faisais pas ce genre de vérif, je ne vous aurai sans doute jamais posé la question,pensant que mes logs fonctionnaient correctement....

Maximum de connexion MySql aurorisées, comment faire?

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

Formation recommandée sur ce thème :

Formation Google Analytics : en 2 jours, apprenez comment exploiter l'essentiel des possibilités de l'outil de mesure d'audience de Google. Formation animée par les experts Google Analytics de Ranking Metrics.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités