|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||||
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
j'ai un module admin basé sur une table avec beaucoup d'enregistrement (12235) il est vrai mais je trouve que 224926ms cela fait beaucoup quand même:
Code :
mon schéma: Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu peux déjà rajouter un index sur lastdate.
Après, je ne sais pas sur quel machine tu travailles (dev ou prod) si ton test est en dev ou prod, ce qui peut changer notablement les performances. Si tu as un accélérateur sur ton serveur (genre APC) si certaines partie de l'écran pourraient être mises en cache. Il y a beaucoup de pistes pour accélérer, moins que pour ralentir
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() ![]() Vivian PennelDeveloppeur Symfony | JSF/Seam Inscription : août 2004 Messages : 173 ![]() |
Peux-tu transmettre le log des requêtes SQL ? (dernier bouton de la debug bar)
Au vu du log de profiling, j'ai pas l'impression que le problème vienne de la base de données mais plutôt de l'hydratation ou de la vue. Accessoirement est-ce que tu développes sous windows ?
__________________
Mon blog : http://blog.developpez.com/vivian-pennel/ |
|
00
|
|
|
#4 | ||||
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
le log sql:
Code :
Je développe sous windows, pas le choix ce qui m'étonne c'est que j'ai un autre module avec a peu prés autant de ligne et l'affichage est correcte.. EDIT: impossible d'editer un enregistrement j'ai un fatal error: Code :
|
||||
|
|
00
|
|
|
#5 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
On doit pouvoir gagner quelques centièmes de secondes avec un index (pas plus de 10 !)
Pour le reste, quel est la configuration de la machine ? Et pour l'édit, ne mélangeons pas tout, au risque de ne rien résoudre. Ici, les perf. Si tu as toujours le problème supplémentaire, ouvre un nouveau sujet, plus documenté.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
bein pour moi le problème est le même.
Si je rajoute pas la ligne dans le code de l'index, je me retrouve avec la même erreur Code :
Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Collection.php on line 474 De plus je vient de monter un module normal sur la même table et j'ai un affichage quasi immédiat. Ce n'est donc pas un problème avec doctrine mais bien avec le traitement de symfony et son admin-generator. PS: d'ailleurs j'ai retrouvé tes mail concernant les filtres. Je posterai un nouveau sujet le concernant, j'ai un point que je comprend pas |
|
|
00
|
|
|
#7 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu n'as pas répondu à la question sur l'environnement.
Es-tu en environnement de débug quant tu tests ? Si oui, il faut savoir que le cache est régénéré à chaque affichage en debug, d'où des délais qui peuvent être notablement long, surtout en form d'administration. Dans ce cas, essaye hors debug, après un cc et fait plusieurs essais consécutif, cela devrait être visiblement plus rapide, même si tu n'auras pas les tableaux pour le démontrer (une montre ?)
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#8 | ||
|
Membre habitué
![]() Ludovic HenryÉtudiant Inscription : octobre 2009 Messages : 97 ![]() |
Alors déjà, une petite remarque: ta fonction assetList est censé prendre en paramètre un object Doctrine_Query. C'est ensuite à cet object que tu va rajouter des join, filtrages etc..
Ton assetList devrait donc ressembler à ceci: Code :
Ce que tu peut regarder, c'est par exemple le nombre de ligne retourner par ta requete SQL ( et la je connais pas d'autre solution que d'éxecuter directement la requête sur le serveur SQL ). Si ce nombre est énorme ( plus de 10000 ligne par exemple ), le problême peut venir d'ici. Il faut donc par exemple diminuer le nombre de join. |
||
|
|
00
|
|
|
#9 | ||
|
Membre confirmé
![]() ![]() Vivian PennelDeveloppeur Symfony | JSF/Seam Inscription : août 2004 Messages : 173 ![]() |
Fais les tests suivants :
- Créé une action ou tu fais la même requête mais avec un Code :
- Dans ton action fais un execute() simple (avec hydratation donc) toujours sur un template vide. Puis donnes nous les résultats. Malheureusement, PHP et surtout symfony a de gros problèmes de performances sous windows (notamment pour le rendu des templates ..). J'ai commencé aussi à développer sur windows mais j'ai vite migré sur un environnement linux à cause de ce problème..
__________________
Mon blog : http://blog.developpez.com/vivian-pennel/ |
||
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
ouh la, beaucoup de réponse
je vais essayer de faire une synthèse. Je suis effectivement en environnement de dev mais avec les données de prod car en environnement de prod j'avais une page blanche (time exceeded dans le log d'apache). Donc le problème ne vient pas de l'environnement de prod. Pour les test de la query, j'ai créé un autre module non admin donc en gros sans template, mais aussi sans filtre et l'affichage se fait en quelques secondes, donc ce n'est pas un problème de requête SQL. Mais effectivement le nombre de ligne avoisine les 15000 lignes. Pour l'OS, je sais windows, c'est mal, mais je n'ai pas le choix. PS: il faut que je voie ce que donne le module admin avec les données de dev, CAD 5 lignes à afficher. |
|
|
00
|
|
|
#11 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Pour le poste de dev en Windows, je pense qu'on est une majorité ici. Par contre, rien ne t'empêche de monter un VirtualBox ou apparenté et d'y démarrer un Linux léger, style un debian sans interface graphique. Sur cette machine tu installe un XAMP et tu peux y faire tes test tranquilles, affichage sur ton windows de ce que la machine Linux donne.
Pour le message : time exceeded dans le log d'apache, tu as un paramètre dans le php.ini qui permet d'étendre le temps. Et ça me pose un problème, pourquoi un time exceeded hors débug et pas en debug, alors qu'il devrait être plus rapide ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#12 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
pour l'os, la machine de prod est sous Windows, pas le choix. Du moins tant que je n'aurait pas vendu mon idée.
pour le time exceeded en prod je l'avait peut être avant de mettre mon set_time_limit à 300. me souvient pas si j'ai fait des test en environnement prod depuis. Mais bon en prod, comme en dev, le délai d'affichage de plusieurs secondes, voir minute n'est pas acceptable. |
|
|
00
|
|
|
#13 |
|
Futur Membre du Club
![]() nicolas lefebvre Inscription : mai 2010 Messages : 72 ![]() |
a tu verifier ton APC "Peu etre saturer" est ce que la memoire apache est suffisante ??
|
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
désolé, je sais pas ce qu'est un APC.
|
|
|
00
|
|
|
#15 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
APC est un système de cache permettant d'accélérer PHP
Il est sur que cela peut apporter des gains de rapidité importants. Maintenant, pour ton truc, il faudrait décomposer le code généré par l'admin générator et trouver ce qui, dans son module, prend tellement de temps. Je me demande si ce n'est pas une question d'hydratation des données, mais à voir.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#16 |
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
j'ai bien l'impression que cela vient de la, même si je n'ai qu'une vague idée de ce que peut être l'hydratation;
comment décomposer mon code pour voir d'où ça vient ? |
|
|
00
|
|
|
#17 |
|
Membre habitué
![]() Ludovic HenryÉtudiant Inscription : octobre 2009 Messages : 97 ![]() |
Pour savoir ce qui prend tellement de temps, tu peut utiliser un débogueur ( comme xDebug). Cet outil te permettra d'éxécuter ton code pas à pas et donc savoir ce qui prend tellement de temps.
Si tu utilise netbeans, tu as un débogueur PHP intégrer. EDIT : Sinon comme c'est ton action index qui est très lente, tu peut copier coller le code générer ( dans cache/....../actions.class.php ) de ton action index, dans ton app/backend/modules/"ton_module"/actions/actions.class.php Ensuite pour chaque ligne, tu met un petit timer que tu affiche. Tu verra donc bien quel ligne est la plus longue à éxécuter. Et ce sera une piste supplémentaire |
|
|
00
|
|
|
#18 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
+1 pour déboguer, quoique, pour les délais de réponses, je ne suis pas sur de l'intérêt.
L'hydratation c'est la transformation des données après leur récupération. Par défaut, doctrine crée un ensemble d'objet intelligent. Mais si tu as toutes les données voulue et qu'elles ne vont pas servir pour envoyer une demande de mise à jour, tu peux demander à les hydrater sous forme d'un tableau (plusieurs types possibles). C'est beaucoup moins gourmand en tous, moins de ressource, moins de place, moins de temps. Et aussi, plus de code pour modifier ni de méthode pour récupérer les données en relation, si elles n'ont pas été récupéré dans la requête de départ, c'est foutu. Je ne sais pas ce que fait symfony dans le module d'administration.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#19 | ||
|
Membre habitué
![]() Inscription : juin 2006 Messages : 488 ![]() |
pour le débogage avec mon installation WAMP j'ai xDebug mais il smble ne pas vouloir se connecter donc mort.
Pour mon problème, je vient de faire un test en essayant de rajouter les filters sur un module normal et bingo, ça plante time execeeded. J'ai l'impression que c'est l'affichage des filtres qui pose problème. Code :
( ! ) Fatal error: Maximum execution time of 300 seconds exceeded in C:\wamp\www\lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Collection.php on line 474 Code :
|
||
|
|
00
|
|
|
#20 |
|
Membre habitué
![]() Ludovic HenryÉtudiant Inscription : octobre 2009 Messages : 97 ![]() |
Comme tu l'a dit, il semblerait que ce soit à l'affichage d'un des filtres que le temps soit enorme. Essaye donc de sélectionner les filtres à afficher.
Par contre, je vient de regarder et dans la propriété "display" de tes "filters", tu affiche le champs "site". Or il n'est pas définit dans ton schema.yml Donc je suppose qu'il s'agit d'une méthode "getSite()" que tu utilise dans ton modèle. C'est peut-être le fait de répéter 12000 fois cette méthode qui ralentit énormément les choses. De plus, tu ne peut pas utiliser cette méthode pour filtrer si ce n'est pas un champs, il me semble. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com