Maximum de connexion MySql aurorisées, comment faire?

WRInaute impliqué
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:
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.
 
WRInaute occasionnel
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
 
WRInaute impliqué
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:
 
WRInaute occasionnel
jeromax a dit:
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.
 
WRInaute occasionnel
do{
if(!$idReq = mysql_connect($w1,$w2,$w3)){sleep(1);}
$i++;
if($i>10){die("Erreur...");}
}while (!$idReq);

Ca c'est une belle connerie...
 
WRInaute impliqué
pipologue a dit:
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...
 
WRInaute occasionnel
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 :)
 
WRInaute passionné
jeromax a dit:
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
 
WRInaute impliqué
Merci, mais c'est ce que je fais: regarde ma fonction, je lui fait retourner le résultat
Code:
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:
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...
 
WRInaute passionné
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 dit:
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
 
WRInaute occasionnel
jeromax a dit:
par exemple, si j'update plusieurs table, je ne peux faire
Code:
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 ...
 
WRInaute impliqué
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....
 
WRInaute discret
c'est bizarre ton truc car moi avant de passé sur un dédié, j'avait 1000 visiteurs par jour et j'ai jamais eu ce souci.
de toute facon 3 connexions simultané, faut déjà y arrivé car trois connexion en une fraction de seconde ....
moi le seul reproche chez eux c'est la limite de la taille des bases qui sont préconisé à 25M mais si tu fait plus et que le serveur mysql ramme, c'est toi qui prend...
enfin c'est pas le sujet....

en fait tu doit avoir un script qui déconne quelque part
moi j'ouvre une connexion par page et je la ferme à la fin.

peut-être fait tu trop de requette par page...(je cherche)
 
Nouveau WRInaute
Bonjour à tous ! ;)

Je suis en train de changer d'hébergeur, suite à une mauvaise expérience (merci le groupe Infektion Group...).

Donc j'ai regardé sous OVH, et je suis donc tombé comme vous sur ce "connexions simultanées à la base de donnée : 3".

Alors étant donné que mon site possède un forum phpbb, avec 400 visites par jour... Donc je voulais vous demander que signifie exactement ces "3 connexions simultanées" : c'est dans un laps de temps défini ?

Merci de vos réponses et de vos conseils ;)
Pit.
 
WRInaute discret
ça veut dire que 3 personnes seulement peuvent se connecter en même temps à la base de données, mais on parle de connexions simultanées au dizième de secondes près, donc en général ça ne gène pas. Même sur un forum, on passe plus de temps à lire les messages qu'à interroger la base de données. En plus, phpBB a un système de cache que tu peux installer manuellement et qui marche bien.
 
Nouveau WRInaute
Oki oki, merci d'avoir été rapide.
Bon en effet, si c'est au dizième prêt, ça devrait passer... surtout que vu la taille de mon site, il faut que je prenne un produit supérieur, m'autorisant 10 connexions. C'est un peu plus cher...

Je vais donc tenter OVH... je vous tiendrai au courant ;)

Merci !
 
WRInaute accro
bon,

déjà il y a de grandes chances qu'un mutualisé, mysql_pconnect() soit un alias de mysql_connect (c est ce que font beaucoups d hebergeurs) donc oublie :)

sinon pour faire proprement :

1) le plus simple, ouvrir chaque connection avant la requete et la refermer immediatement apres la requete, puis la re-ouvrir à la prochaine requete, etc...

2) un peu plus long. aucun traitemement php ne dois etre fait apres la balise <body>. une fois dans le corps de ta page, tu n'a le droit de faire que tu echo $var_phph :)

3) systeme de cache. ca reste qd meme bien au dessus des autres methodes :)
 
Discussions similaires
Haut