JeuWeb - Crée ton jeu par navigateur
Connexions max pour le MySQL, comment, quoi, etc ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Connexions max pour le MySQL, comment, quoi, etc ? (/showthread.php?tid=2746)

Pages : 1 2 3


Connexions max pour le MySQL, comment, quoi, etc ? - Ludvig - 12-07-2008

Hello !

J'espère que cette question évoquera moins de sujets sensible Smile

Bon, je viens de déménager mon jeu d'un hébergeur pro vers un serveur perso en attendant d'en avoir un autre vrai "pro".

J'ai donc tout genre de problèmes et même si j'ai résolu quasiment tous, j'aimerai avoir vos avis (et un peu d'aude aussi ^^) sur ce problème (aussi) :


J'ai quelques scripts utilisables exclusivement par moi, ils affichent le nombre de joueurs, ils vérifient des trucs "chiants " comme si il traine des messages / objets / ... d'un joueur qui n'existe plus (j'efface normalement tout ce qu'il faut mais avec les DB on ne sait jamais...).

Et maintenant j'ai de temps en temps cette erreur :

Code PHP :
<?php 
Warning
: mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10048) in C:\wamp\www\jeu\connect.php on line 172
DataBase Error!!!
metamorphesQuery failed: No database selected

Cela est même arrivé quand je joue un perso dans le jeu (peut-être après un script-perso démandant beaucoup de connexions je ne ma souviens plus), et là je me connecte pas si souvent que ça au DB...


J'imagine que j'ai un truc du genre "max auth connections = XYZ" trop petit mais quel est l'impact (si c'est ça) de juste le monter ?

Faut il peut-être revoir les scripts et qu'est-ce qu'il ne faut pas faire etc. ?


/Lud


RE: Connexions max pour le MySQL, comment, quoi, etc ? - z3d - 13-07-2008

Je crois que la fin du message d'erreur est assez explicite :
Code PHP :
<?php 
Query failed
: No database selected

C'est un problème de base quand même là, je doute que le serveur SQL soit en cause ici, vérifie le(s) script(s) mis en cause surtout la partie connection.

Ensuite il est possible que ce soit une limitation de ton nouvel hébergement et voir à optimiser ton système informatisé.


RE: Connexions max pour le MySQL, comment, quoi, etc ? - Sephi-Chan - 13-07-2008

Bonjour,

Effectivement, je doute que ton message d'erreur ai à voir avec le nombre de connexions.

Effectue-tu ta connexion sous une condition particulière qui pourrait faire que la portion de script n'est pas évaluée ?


Sephi-Chan


RE: Connexions max pour le MySQL, comment, quoi, etc ? - Ludvig - 13-07-2008

Ben cela n'arrive pas systématiquement c'est ça le problème, par contre si j'enchaine des scripts qui font beaucoup de connexions sur le DB ça "bloque" (même dans le jeu) avec ce message d'erreur.


RE: Connexions max pour le MySQL, comment, quoi, etc ? - Sephi-Chan - 13-07-2008

Tu veux dire que tu déconnectes/connectes plusieurs fois à ta base de données au sein d'un script ?

Si oui, tu devrais éviter (j'ai lu que la connexion était plutôt gourmande). De plus, si tu fais plusieurs connexion, il faut à chaque fois indiquer la base sur laquelle les requêtes seront effectuées, et c'est sûrement ça qui te manque et qui génère l'erreur.


Sephi-Chan


RE: Connexions max pour le MySQL, comment, quoi, etc ? - z3d - 13-07-2008

Normalement, c'est une très bonne chose, d'ouvrir sa connexion, de faire son traitement et de la fermer.

Mais ! Après avoir été confronté à ce type de problème, il s'avère que c'est un très mauvaise chose lorsque l'on demande à PHP de faire ceci dans une boucle c'est tellement rapide que MySQL en perd la tête Confused

Je te conseil d'ouvrir et fermer ta connexion en dehors de la boucle. Si jamais tu ne procèdes pas de cette manière c'est qu'il y a un autre souci ailleurs mais au vu de ce que tu nous dis, je penche à 95% pour ce problème.


RE: Connexions max pour le MySQL, comment, quoi, etc ? - Sephi-Chan - 13-07-2008

Je pense qu'il gagnerait à tester en mettant un connexion en haut de page et une fermeture en fin de page. Cela permettrait de voir s'il ne manque rien dans ce script.

L'autre possibilité est d'utiliser une classe Singleton pour MySQL et comme ça tu n'as pas de problèmes, tu lance un MySQL::getInstance(); avant de faire ta requête, s'il y a une connexion, elle sera utilisée, sinon, elle sera effectuée.


Sephi-Chan


RE: Connexions max pour le MySQL, comment, quoi, etc ? - Ludvig - 13-07-2008

Merci merci, je fais déjà tout cela, c'est pour ça que j'ai penché pour la possibilité de l'épuisement des connexions.

Sephi-Chan,
Moi j'ai deux fonctions (& une var globale qui compte le nombre de connexions / déconnexions pour vraiment déco. que quand tout le monde a fini (fonctions, connexions dans des connexions etc)) qui gère cela (connect() & deconnect()) et ça marche très bien.
Par contre toi si tu te connectes des qu'on fais un MySQL::getInstance(); alors comment tu gère la déconnexion ?

Par le destructeur (y en a dans php ?)
ou manuellement (ie. il faut appeler MySQL::closeConnexion(); une fois pour chaque MySQL::getInstance() ) ?
ou un sorte de "kill" (huh) MySQL::ForceCloseConnexion();

Ou bien par un autre moyen Smile ?


RE: Connexions max pour le MySQL, comment, quoi, etc ? - Sephi-Chan - 13-07-2008

Actuellement, elle se ferme implicitement en fin de script (s'il y a une connexion active, bien sûr). Sinon, il me suffirait d'appeler la méthode MySQL::close() après chaque requête, elle vérifierai alors s'il y a une connexion active, et si oui, la fermerait. Wink


Sephi-Chan


RE: Connexions max pour le MySQL, comment, quoi, etc ? - Ludvig - 13-07-2008

Oki, j'ai reçu comme consigne il y a longtemps de suivre cette formulaire :

* Connexion DB
* requêtes
* Déconnexion DB
* Calcules & et affichage (pas d' "echo" mais sauvegarder tout affichage dans une chaine de caractère, $_SESSION['out'] par exemple)
* faire l'echo du chaine ($_SESSION['out'])

Toi tu risque d'avoir la connexion ouverte, si je ne me trompe pas, jusqu'à la fin du script ce qui veut dire que le premier echo peut arriver (techniquement) avant la derniere requête ?

Enfin je dis ça comme ça, je ne me souviens plus exactement les raisons de base pourquoi il fallait faire comme cela, je crois que si les headers sont envoyés (automatiquelent au première echo) après on subis des pénalités à chaque echo ou requête, enfin un truc du genre.
Je me souviens en tout cas que c'est important de suivre cette 'formule' ^^

ps. moi je ne fais pas pareil, j'augmente un compteur pour chaque "connexion" et je le décroit pour chaque "déconnexion", arrivé à zero je déconnecte, comme ça je peux faire une appelle à une fonction qui se connecte/déconnecte par exemple.