Mauvais plan d'exécution pour Microsoft Dynamics AX
Bonjour,
Je viens vers vous car nous avons un problème entre Oracle et notre ERP. Nous sommes en cours de migration de Axapta V3.0 à Dynamics AX 2009. Nous étions sous Oracle et nous n'avions aucun soucis mais là nous sommes face à un problème étrange.
Il semblerait qu'Oracle n'utilise pas le bon plan d'éxécution lorsqu'il reçoit une requête en provenance d'AX.
Voici, par exemple, une requête exécutée par l'ERP (capturée via Toad) :
Code:
1 2 3 4 5 6 7 8
| SELECT /*+ FIRST_ROWS */
a.recid
FROM docuref a
WHERE ( ( (SUBSTR (NLS_LOWER (refcompanyid), 1, 4) = NLS_LOWER (:in1))
AND (reftableid = :in2)
)
AND (refrecid = :in3)
) |
Si on regarde le plan d'exécution utilisé, on voit qu'oracle utilise l'index "RECIDX" qui possède les 2 champs suivant :
- SUBSTR (NLS_LOWER (refcompanyid), 1, 4)
- RecId
Si on copie la requête dans le navigateur Toad et qu'on regarde le plan d'exécution, il est différent et utilise l'index "REFIDX" qui possède les champs suivant :
- SUBSTR (NLS_LOWER (refcompanyid), 1, 4)
- RefTableId
- RefRecId
- CreatedDateTim
- SUBSTR (NLS_LOWER ("CreatedBy"), 1, 5)
La deuxième solution est clairement meilleur et incomparable en terme de temps de réponse.
Quelqu'un aurait-il une idée ? un retour d'expérience sur Dynamics AX ?
Merci.