Longue boucle

Signaler
Messages postés
171
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
31 août 2009
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonsoir à tous,





Voilà mon problème. J'ai des longues boucles WHILE à effectué (+ de
3000 entrées) et malheureusement, quand je charge la page qui possède
cette boucle, elle n'arrive jamais jusqu'au bout (pas mal d'action à
faire pour chaque tour tout de même > 1 dixaine de requete sql...). La page s'arrête de se
charger et ne fini pas la boucle.


Je voudrais savoir comment faire pour que celle-ci soit
entièrement réalisé, et avec encore plus d'entrées aussi. (celà
viendrait-il de l'hebergeur ?)





Merci à tous,





Tilix.

42 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
3000 entrées * 10 requètes = 30 000 requètes sur un bouclage entier :o :o :o

Il y a un temps limite pour l'exécution d'un script en PHP ==> set_time_limit() dans ton fichier php.ini.
Suffit de changer la. (ca ne marche que si l'hebergeur est un dédié)
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Et si on écrit sur la page set_limit_time(0) ; ca ne marche pas ?
A++
<hr size="2" width="100%">Si un des membres à poster une reponse qui convient, accepter là !
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
Salut,

le mieux serait de demander moins de requettes... en
gros, soit tu fais une procédure en MYSQL 5, soit tu fais des INNER
JOIN ou des LEFT JOIN, ou alors, tu fais un affichage par pages...


car ton settimelimit ne va pas suffire...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
30 000 requêtes dépassant les 30 secondes ? Ca fait bcp quand même, il doit y avoir moyen d'optimiser ces requêtes à mon avis, surtout si c'est du select...Et effectivement, 30 000 requêtes sur un bouclage, ou sur une page disons, ça fait aussi beaucoup. ca doit pouvoir se réduire.
Y a un autre truc à faire dans ce cas là : redescendre les infos. je veux dire, parfois, on fait plein de tables, avec des clefs étrangères, etc...et du coup on a bien fait sa structure, et de n'importe où, avec les bons where, on peut récupérer n'importe quoi.
Ben parfois, au lieu de s'appuyer sur les jointures, il vaut mieux redsecendre l'info dans une table, bcp plus bas, pour limiter les requêtes justement.
Par exemple, pour une gestion d'ebntrepôts, sur les emplacements, quand il y a des dizaines de milliers de ces emplacements, c'est peut-être pas mal de redescendre dans la table des stocks, l'info concernant la référence article qui s'y trouve, le client, etc... ;-)
Messages postés
366
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 février 2007
2
Si non, ben il faut un programme derrière... (Exemple, programmé en C) qui lui, fait ces requêtes et qui les donnes à PHP.

Je ne sais pas programmer en C, alors je ne pourrais pas t'aider, mais je sais que ça se fait.

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
Salut,

"Si non, ben il faut un programme derrière... (Exemple, programmé en C)
qui lui, fait ces requêtes et qui les donnes à PHP."



=> on appelle ça un serveur SQL

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
366
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 février 2007
2
Mais non, tu n'as pas compris...

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)
Messages postés
366
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 février 2007
2
Je voulais dire, un programme en C appelé par un tâche cron (par exemple) et qui executerai les requêtes sql à la place de php.

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
lol, j'ai compris, mais il ne servirait à rien !

dans 99% des cas, on ne peut pas exécuter ce style de programmes sur un
serveur, et si l'on peut alors autant utiliser ce programme comme un
cgi ! si on fait du php, c'est pas pour se faire chier avec du C ! et
en plus, ici, le problème ne vient pas de la lenteur de php, mais de la
lenteur de mysql (30 000 requettes...)

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
366
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 février 2007
2
Ben non, ça vient de la limite d'execution de PHP...

Après, pour executer ça, il suffit d'avoir un petit shell quelque part... Et tout n'est pas forcément fesable en PHP.

Mais j'ai dis C, comme ça..; après oui en effet le CGI peut etre aussi bien.



Enfin bon, on va s'arreter là si non on va flooder tout le topic.

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,

quel est ton code ? et les structures de tes tables ? qu'on voit si on peut optimiser un peu au moins ;-)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
"

Ben non, ça vient de la limite d'execution de PHP..."
Ca c'est se qui en découle :)

30k de requètes en 30 secondes... c'est que ton site est mal codé.
Requètes mal exploitées...etc...
Messages postés
171
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
31 août 2009

Je me suis lancé dans la création d'un site de jeu de construction d'une ville.

Mon site contient plus de 2500 membres actifs.

Tous les jours, ces membres gagnent de l'argent virutel sur ce jeu.



Il y'a une boucle avec les 2500 membres du site.

Dans cette boucle, il y'a une autre boucle d'environ 10 tours (le système cherche sur 10 tables différentes afin de faire un calcul de l'argent que le membre doit gagner. (en fonction des bâtiments qu'il possède))

Soit un total de 25000 requetes.



Le nombre d'inscrit de ce site ne fait qu'augmenter de jour en jour.

Lorsque le site aura atteint encore plus de membre, le nombre de requete sera alors démultiplié.



Je voudrais trouver une solution a ce problème.
Messages postés
366
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 février 2007
2
Je remet ça avec mon programme en C lol ^^

Faut que tu fasses un programme en C, qui s'éxecute avec une
tâche cron (programmes là pour qu'il s'éxecute plutot la nuit quand il
y a peu d'acitvitée). Qui fasse ce travail.

Thomvaill
IRC : Thomas (irc.heliosnet.org:6667 #programmation)
Messages postés
171
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
31 août 2009

Je n'y connais rien en C moi....
Messages postés
171
Date d'inscription
samedi 4 décembre 2004
Statut
Membre
Dernière intervention
31 août 2009

Et cette programmation C serai sensé servir à quoi ?
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
"Dans cette boucle, il y'a une autre boucle d'environ 10 tours (le système cherche sur 10 tables différentes afin de faire un calcul de l'argent que le membre doit gagner. (en fonction des bâtiments qu'il possède))"





c'est peut- etre là qu'il ya un pb de conception ou structure de ta base
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Il serait bien de voir le code et les structures des tables, mais effectivement y'a surement un problème de conception...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Je le pense aussi.
Tilix, vous savez combien il y a de membres sur CS ? 591000. Vous imaginez que CS soit avoir pas mal de tables différentes, aussi.
Et pourtant, hormis quand les serveurs plantent ;-), vous avez déjà vu une requête qui prend plus de 10s sur ce site...?
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Moi j'ai déjà vu la page se générér en plus de dix secondes ^^

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>