Problème de performances lors d’une jointure entre objets

4.0
Problème de performances lors d’une jointure entre objets
0.0 0
Tags: #<Tag:0x00007f682ce322e0>

#1

Bonjour,
J’ai créé un objet métier « Bail simplifié » (ImmoLeaseSimple) qui est lié aux objets « Adresses » (ImmoAddress) et « Bail » (ImmoLease).

Il n’y a pas de traitement particulier dans cet objet, juste un petit hook postValidate et qq contraintes.
Pourtant, quand je créé une nouvelle ligne de type « Interne » (qui fait appel à la jointure avec l’objet « Bail »), je rencontre un temps de réponse qui est parfois trop long à l’enregistrement (entre 1 et 30 secondes !) sachant que le système met un temps énorme avant de déclencher le postValidate (je le vois avec des console.error).

Parfois même le simple clic sur la loupe de l’objet lié met qq secondes à afficher une liste qui contient 80 lignes seulement !

Si je crée une nouvelle ligne avec un autre type (sans jointure avec « Bail »), je n’ai pas ce pb de performance.

Pourriez-vous svp vous connectez à notre module de test « immodevabed » avec le user de @Nathalie afin de m’aider à trouver ce qui fait figer le système à chaque enregistrement ?

Pour faire le test, il faut aller sur Menu Investisseur/ Bail simplifié/ Créer / ensuite

  • Sélectionner Type de bail « Interne » (jointure avec Bail)
  • Cliquer sur la loupe « Code bail interne » qui s’est affiché
  • Sélectionner « Bail-00008 »
  • Et enfin « Enregistrer et fermer »

Et essayer de refaire la même manip plusieurs fois (avec le même bail-00008), vous verrez qu’il y a un ralentissement important à l’enregistrement.

Merci d’avance pour votre aide.
Abed.


#2
  1. Utilisez le monitoring (du menu exploitation) qui trace les requetes en nombre et en temps de réponse.

Dans l’onglet Data, il y a en bas la liste des 10 requetes les plus longues.
Si aucune est longue, ou qu’il n’y a pas la votre ce n’est pas un pb SQL (mais plutôt java, réseau…)

  1. Vérifiez s’il y a bien des index sur vos FK.

ajoutez console.traceObject(true) en début de script de votre objet
pour afficher les requetes dans les logs.

Ensuite faites un explain plan de vos requetes.

Créer des index non unique sur vos FK si c’est bien le problème

  1. ou utilisez la proposition d’index (action sur l’objet) et appliquez-les via l’accès DB
    Simplicité crée normallement la clé unique sur la clé fonctionnelle et non unique sur les clés étrangères.
    mais il peut y avoir eu des erreurs lors de la création / lisible dans les logs serveur.