IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

délai de réponse ahurissant [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut délai de réponse ahurissant
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Configuration 12 32.69 0 
    Factories 1 112.57 0 
    Action "asset/index" 1 223980.80 99 
    Database (Doctrine) 6 0.08 0 
    View "Success" for "asset/index" 1 555.60 0 
    Partial "asset/_assets" 1 2.18 0 
    Partial "asset/_flashes" 1 2.18 0 
    Partial "asset/_list_header" 1 2.08 0 
    Partial "asset/_filters" 1 202.13 0 
    Partial "asset/_filters_field" 2 186.14 0 
    Partial "asset/_list" 1 206.70 0 
    Partial "asset/_list_th_tabular" 1 8.44 0 
    Partial "asset/_pagination" 1 10.45 0 
    Partial "asset/_list_td_batch_actions" 10 22.14 0 
    Partial "asset/_list_td_tabular" 10 29.94 0 
    Partial "asset/_list_td_actions" 10 28.06 0 
    Partial "asset/_list_batch_actions" 1 3.47 0 
    Partial "asset/_list_actions" 1 2.13 0 
    Partial "asset/_list_footer" 1 1.67 0
    surtout que j'ai modifié ma requete pour réduire l'accés a la base de données je n'en ai plus que 6.

    mon schéma:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Asset:
      tableName: asset
      actAs: [Timestampable]
      columns:
        typeasset_id: integer
        value: string(255)
        groupasset_id: integer
        useit: boolean
        exist: boolean
        lastview: date
      indexes:
        unique1:
          fields: [typeasset_id,value,groupasset_id]
          type: unique
      relations:
        type:
          class: Typeasset
          local: typeasset_id
          foreign: id
          foreignAlias: listTypeAsset
          onDelete: CASCADE
        group:
          class: groupasset
          local: groupasset_id
          foreign: id
          foreignAlias: listGroupAsset
    ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function activeAsset(){
    		set_time_limit(300);
    		//die("dans active asset");
        	$q = $this->createQuery('a')
    			->leftJoin('a.type')
    			->leftJoin('a.group')
        		->where('lastview = ?', $this->getLastDate());
        	//die($q->getSqlQuery());
        	return $q;
    	}
    mon generator.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    generator:
      class: sfDoctrineGenerator
      param:
        model_class:           asset
        theme:                 admin
        non_verbose_templates: true
        with_show:             true
        singular:              ~
        plural:                ~
        route_prefix:          asset
        with_doctrine_route:   true
        actions_base_class:    sfActions
     
        config:
          actions: ~
          fields:  ~
          list:    
            display: [group, type, value]
            max_per_page: 10
            object_actions:          
              #Detail: ~    
              _edit: ~     
            table_method: activeAsset
          filter:  
            display: [typeasset_id, site]
          form:    ~
          edit:    ~
          new:     ~

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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 mais il en reste

  3. #3
    Membre éprouvé

    Homme Profil pro
    Software Engineer
    Inscrit en
    Août 2004
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 173
    Par défaut
    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 ?

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    le log sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    SQL queries
    Doctrine Version: 1.2.2
    SET NAMES 'UTF8'
     
    0.00s, "doctrine" connection
    SELECT DISTINCT a.id AS a__id, a.lastview AS a__lastview FROM asset a ORDER BY a.lastview DESC
     
    0.13s, "doctrine" connection
    SELECT COUNT(*) AS num_results FROM (SELECT a.id FROM asset a LEFT JOIN typeasset t ON a.typeasset_id = t.id LEFT JOIN groupasset g ON a.groupasset_id = g.id WHERE a.lastview = '2010-11-01' GROUP BY a.id) dctrn_count_query
     
    0.03s, "doctrine" connection
    SELECT t.id AS t__id, t.name AS t__name FROM typeasset t
     
    0.00s, "doctrine" connection
    SELECT s.id AS s__id, s.name AS s__name, s.description AS s__description, s.manager_id AS s__manager_id, s.country_id AS s__country_id FROM site s
     
    0.00s, "doctrine" connection
    SELECT a.id AS a__id, a.typeasset_id AS a__typeasset_id, a.value AS a__value, a.groupasset_id AS a__groupasset_id, a.useit AS a__useit, a.exist AS a__exist, a.lastview AS a__lastview, a.created_at AS a__created_at, a.updated_at AS a__updated_at, t.id AS t__id, t.name AS t__name, g.id AS g__id, g.name AS g__name, g.site_id AS g__site_id, g.user_id AS g__user_id, g.status AS g__status, g.person AS g__person, g.lastview AS g__lastview, g.created_at AS g__created_at, g.updated_at AS g__updated_at FROM asset a LEFT JOIN typeasset t ON a.typeasset_id = t.id LEFT JOIN groupasset g ON a.groupasset_id = g.id WHERE (a.lastview = '2010-11-01') LIMIT 10
     
    0.00s, "doctrine" connection
    je suis sur la machine de test avec les données de prod. Mais comme c'est pour un intranet, la bécane de prod sera pas vraiment plus puissante :/

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    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

  5. #5
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    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é.

  6. #6
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    que dans l'édit.

    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

  7. #7
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    je rappelle mon schema:
    je cherche a créer un module-admin sur une table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Asset:
      tableName: asset
      actAs: [Timestampable]
      columns:
        typeasset_id: integer
        value: string(255)
        groupasset_id: integer
        useit: boolean
        exist: boolean
        lastview: date
      indexes:
        unique1:
          fields: [typeasset_id,value,groupasset_id]
          type: unique
        lastview:
          fields: 
            lastview:
              sorting: DESC      
      relations:
        type:
          class: Typeasset
          local: typeasset_id
          foreign: id
          foreignAlias: listTypeAsset
          onDelete: CASCADE
        group:
          class: groupasset
          local: groupasset_id
          foreign: id
          foreignAlias: listGroupAsset
    cette table est en relation avec la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    groupasset:
      actAs: [Timestampable]
      columns:
        name: string(255)
        site_id: integer
        user_id: integer
        status: string(2)
        person: string(2)
        lastview: date
      indexes:
        Unique1:
          fields: [name, site_id]
          type: unique
      relations:
        owner:
          class: sfGuardUser
          local: user_id
          foreign: id
          foreignAlias: groupassets
          onDelete: SET NULL
        site:
          class: Site
          local: site_id
          foreign: id
          onDelete: SET NULL
    qui est en relation avec: sfGuardUser

    si j'appelle ma page index (donc avec filtre) sur mon env de prod j'ai un jolie time exceeded.

    J'ai vidé la table asset, j'ai toujours ce time exceeded
    je vide la table groupasset, je n'ai plus de table exceeded.

    CQFD: la page index asset plante du fait du nombre de groupasset a afficher dans le select du filter.

    J'ai modifié le champ pour en faire un sfWidgetFormDoctrineJQueryAutocompleter et ça marche.

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu as beaucoup de monde dans groupasset ?

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 534
    Par défaut
    environ 15 000 enregistrements.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Par défaut
    Forcément ca explique beaucoup de chose ^^

  11. #11
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je ne veux même pas imaginer le poids de la page générée !



    Allez, pour rire, imaginons une taille moyenne de 20 caractères en utf8, soit dans les 40o plus l'encadrement 34o soit dans les 80o par lignes. 15.000 lignes -> 1.2Mo rien que pour la liste ! un beau bébé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Délai de réponse d'un joueur.
    Par MCL33 dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 05/11/2012, 13h30
  2. [AJAX] Délai de réponse
    Par darkterreur dans le forum jQuery
    Réponses: 12
    Dernier message: 02/10/2012, 00h00
  3. délai de réponse après postulation
    Par Enohra dans le forum Contrat
    Réponses: 3
    Dernier message: 10/05/2009, 20h01
  4. [Turbo Pascal] Introduire un délai de réponse
    Par lex001 dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 17/03/2009, 02h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo