aro_id, gid et id

Réduire
X
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Problème] aro_id, gid et id

    Bonjour. Les 1500 produits et les 13000 clients De Virtuemart sont installés sur le site en local, avec J 1.5.18 et VM 1.1.4.L Le tout a été intégré avec CSVI ou à la mano avec PhpMyAdmin directement dans les tables.
    L'affichage de la liste de produits n'est pas très rapide mais on atteint des sommets de lenteur si on souhaite se logger. Je me suis connecté en tant qu'admin (niveau shopper - shopper_id 5), l'affichage est ok. Mais si je me logge avec un des paramètres de client faisant partie d'un groupe à tarif privilégié, l'affichage de la liste de produits est beaucoup plus longue.
    J'ai optimisé mes tables, vérifié qu'il n'y avait pas de souci au niveau de la table des catégories (car lors d'un précédent site, il y avait répétition de catégories et le simple fait de nettoyer avait redonné de la vitesse au site).
    J'ai cherché sur le Net et ai trouvé ce site J'y lis que le Super Admin doit avoir le gid 26 et non 25.
    Qu'en pensez-vous ?
    Qu'est-ce qui pourrait ralentir tellement l'affichage de la liste produits une fois que le client est loggé ?

    Dans jos_users, l'admin a une id = 62 et un gid = 25 (dans mon install)
    Dans jos_core_acl_aro, il a une id=10 pour une value =0

    Est-ce correct si les autres users ont, dans cette table, une id = id de la table users (donc il y une id = 10 pour l'admin, puis une id = 63 pour l'user suivant). Ne devraient-ils pas tous avoir l'id = 10 (pour une value je suppose = id jos_users, puisqu'il semblerait que le 10 de l'admin corresponde au groupe 10 de la table jos_core_acl_aro_sections ? Les lenteurs pourraient-elles provenir de là ?

    Merci d'avance
    Dernière édition par louisseize à 23/10/2010, 12h00

  • #2
    Bonjour,
    J'ai cherché sur le Net et ai trouvé ce site J'y lis que le Super Admin doit avoir le gid 26 et non 25.
    Qu'en pensez-vous ?
    que c'est une C...ie.
    Le gid correspond à l'id dans la table jos_core_acl_aro_groups tu peux vérifier.

    Le 10 de l'admin dans jos_core_acl_aro correspond à un autoincrément ; le user suivant à un id de 63 dans users parce que c'est l'autoincrément de users et 11 comme id dans jos_core_acl_aro.

    Ensuite jos_core_acl_groups_aro_map fait le lien entre jos_core_acl_aro et jos_core_acl_aro_groups en reprenant les id des deux tables (id et gid). CE que tu décris est donc normal et n'a pas d'impact - en tant que valeur des données - sur les performances. Par contre ce système en tant que structure ramène quelques jointures dans les requêtes, ça peut jouer... J'ai déjà eu par exemple des problème de "big query" avec GmAccess, qui exploite cette même structure.

    Ce que je ferais d'abord, c'est essayer de jouer les requêtes "à la main" dans PhPmyAdmin pour voir s'il y a un loup (un produit cartésien qui explose...).
    Schtroumpfe toi le Schtroumpf t'aidera.
    Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

    Commentaire


    • #3
      bonjour et merci Grand Schtroumpf. Bien ... j'ai testé celle-ci :
      Code:
      SELECT DISTINCT `product_name`,`products_per_row`,`category_browsepage`,`category_flypage`,`jos_vm_category`.`category_id`, SUM(`jos_vm_product_warehouse_xref`.`quantity`) AS `product_in_stock`,
                                      `jos_vm_product`.`product_id`,`product_full_image`,`product_thumb_image`,`product_s_desc`,`product_parent_id`,`product_publish`,`product_sku`, `product_url`,
                                      `product_weight`,`product_weight_uom`,`product_length`,`product_width`,`product_height`,`product_lwh_uom`,`product_available_date`,`product_availability`,`jos_vm_product`.`mdate`, `jos_vm_product`.`cdate`, `buyable`, `show_price`, `show_street_price` 
        FROM (`jos_vm_product`, `jos_vm_category`, `jos_vm_product_category_xref`,`jos_vm_shopper_group`, `jos_vm_product_shopper_group_xref`)
        LEFT JOIN `jos_vm_product_price` 
        ON `jos_vm_product`.`product_id` = `jos_vm_product_price`.`product_id`
      
        LEFT JOIN (`jos_vm_product_warehouse_xref` 
        INNER JOIN `jos_vm_warehouse_shopper_group_xref` 
        ON `jos_vm_product_warehouse_xref`.`warehouse_id` = `jos_vm_warehouse_shopper_group_xref`.`warehouse_id`) 
        ON (`jos_vm_product`.`product_id` = `jos_vm_product_warehouse_xref`.`product_id` 
        AND `jos_vm_product_warehouse_xref`.`warehouse_id`=`jos_vm_warehouse_shopper_group_xref`.`warehouse_id` 
        AND `jos_vm_warehouse_shopper_group_xref`.`shopper_group_id`='7') 
      
        LEFT JOIN `jos_vm_shopper_vendor_xref` 
        ON (`jos_vm_shopper_vendor_xref`.`user_id` =62 
        AND `jos_vm_shopper_vendor_xref`.`shopper_group_id`=`jos_vm_shopper_group`.`shopper_group_id`) 
        WHERE `jos_vm_product_category_xref`.`product_id`=`jos_vm_product`.`product_id`
       
        AND `jos_vm_product_category_xref`.`category_id`=`jos_vm_category`.`category_id`
       
        AND `jos_vm_product_shopper_group_xref`.`product_id`=`jos_vm_product`.`product_id`
       
        AND `jos_vm_product_shopper_group_xref`.`shopper_group_id`='7'
       
        AND (`jos_vm_product`.`product_id`=`jos_vm_product_price`.`product_id` OR `jos_vm_product_price`.`product_id` IS NULL) 
       
        AND `product_parent_id`='0' 
       
        GROUP BY `jos_vm_product`.`product_id` 
       
        ORDER BY `jos_vm_product`.`product_name` ASC 
        LIMIT 0, 20
      En effet, 88 secondes pour un visiteur enregistré, c'est un peu long. Et encore, je suis en local.
      Il semble que ce soit le composant SGE (Shopper Group Extension) car quand je le désactive, ça va plus vite (mais je pense que je ne dois plus être loggé du coup).

      Un moment, il y avait eu la table categories qui avait du micmac (des champs en double). Cela pourrait être encore quelque chose comme ça ?

      Merci d'avance

      Commentaire


      • #4
        Re,
        les deux tables jos_vm_shopper_vendor_xref` et `jos_vm_shopper_group`ne sont liées qu'entre elles (et donc avec aucune des autres tables), et avec une jointure dont l'écriture me laisse perplexe...

        Si on n'a pas de chance, MySQL qui n'est pas connu pour sa finesse, va faire le produit cartésien de jos_vm_shopper_group avant de restreindre son nombre d'enregistrements en appliquant la jointure sur jos_vm_shopper_vendor_xref elle même filtrée par `user_id` =62.

        La vraie question est qu'est-ce que fait ce sous ensemble de données indépendant au milieu de la requête ?

        Je crois que je n'ai jamais vue une requête écrite de façon aussi étrange... Je ne dis pas forcément mal écrite parce qu'on ne peut pas exclure qu'on en soit arrivé à cette forme suite à une optimisation d'arrache-pied (malheureusement alors menée en visant un cas "général" qui n'est pas le tien...)

        Il faudrait pour commencer préfixer tous les champs par leur table respective, histoire de s'assurer que toutes les tables servent.

        Puis remettre les jointures sous une forme canonique en faisant le joint au fur et à mesure de l'introduction des tables...

        On peut se demander aussi à quoi sert le group by, je n'ai vu aucune fonction de groupe (sum, min...)
        Schtroumpfe toi le Schtroumpf t'aidera.
        Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

        Commentaire


        • #5
          aro_id, gid et id

          Grand schtroumpf désolé d'ouvrir une nouvelle discussion mais ma précédente a été fermée. Pourquoi ? Je ne peux donc t'y répondre directement, je le fais ici.
          Cette requête étrange est le fait du composant SGE (Shopper Group Extensionj) qui me permet de gérer l'affichage des produits. En effet, certains (et pas tous) doivent apparaître au visiteur non enregistré mais pas leurs prix.

          Tu me dis de "préfixer tous les champs par leur table respective". Càd ?
          Par exemple si le champ id vient de la table x, ajouter x. devant le nom du champ ?

          J'ai également appelé au secours le concepteur du composant. Je communiquerai ici sa réponse, ça peut servir.

          Commentaire


          • #6
            Re,
            mais ma précédente a été fermée. Pourquoi ?
            Fausse manip ? Je l'ai réouverte et fusionné les discussions.

            Par exemple si le champ id vient de la table x, ajouter x. devant le nom du champ ?
            Tout à fait.

            J'ai également appelé au secours le concepteur du composant.
            Si ce n'est pas (trop) confidentiel, passe lui une copie de ta base et ta requète qu'il puisse voir où ça coince et optimiser son SQL sur un cas concret...
            Schtroumpfe toi le Schtroumpf t'aidera.
            Je ne schtroumpfe pas aux demandes de schtroumpf par MP.

            Commentaire

            Annonce

            Réduire
            1 sur 2 < >

            C'est [Réglé] et on n'en parle plus ?

            A quoi ça sert ?
            La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

            Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

            Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
            Comment ajouter la mention [Réglé] à votre discussion ?
            1 - Aller sur votre discussion et éditer votre premier message :


            2 - Cliquer sur la liste déroulante Préfixe.

            3 - Choisir le préfixe [Réglé].


            4 - Et voilà… votre discussion est désormais identifiée comme réglée.

            2 sur 2 < >

            Assistance au forum - Outil de publication d'infos de votre site

            Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

            Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

            Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

            UTILISER À VOS PROPRES RISQUES :
            L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

            Problèmes connus :
            FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

            Installation :

            1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

            Archive zip : https://github.com/AFUJ/FPA/zipball/master

            2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

            3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

            4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

            5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

            6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
            et remplacer www. votresite .com par votre nom de domaine


            Exemples:
            Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
            Télécharger le script fpa-fr.php dans: /public_html/
            Pour executer le script: http://www..com/fpa-fr.php

            Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
            Télécharger le script fpa-fr.php dans: /public_html/cms/
            Pour executer le script: http://www..com/cms/fpa-fr.php

            En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

            Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
            Voir plus
            Voir moins
            Travaille ...
            X