Hello,
J'ai une requête qui me pose pas mal de soucis de performances depuis un moment.
Au début j'étais en Hibernate et puis à un moment donné les performances se sont dégradées (sans que le code ait changé), j'ai tenté différents "patchs" et au final j'ai été carrément vers une solution d'appel de la requête en SQL natif.
getConnexion().prepareStatement(sqlRequest).executeQuery();
L'application utilise le diriver odbc com.oracle.jdbc.odbc.11-5.1-JDK5.jar pour parler à la base Oracle11.
- Ce matin, les DBA me disaient que ce qui était long c'était pas l'exécution mais la partie fetch (6s / 277s).
- Cet après-midi, tout est de nouveau rapide sans qu'aucune configuration n'ait changé (6s au total ==> 0s / 6s)
Note : personne d'autre que moi ne travaille sur la base pour expliquer cette différence et dès ce matin on avait tenté un recalcul d'index sans que ça n'influe
Du coup je recontacte les DBA qui me disent que la requête (toujours la même) utilise cet après-midi des plan d'exécution différents que ce matin.
(mais là je comprends pas car ce qui prend le plus de temps c'est le fetch donc si je ne me trompe pas le plan d'exécution influence le temps...d'exécution).
Comment ça se fait que ça switche de plan d'exécution?
Ils me disent qu'on peut forcer l'utilisation d'un plan d'exécution mais qu'ils auiment pas trop car c'est un peu moche comme solution.
Partager