Bonjour,
Je rencontre actuellement le soucis suivant:
Lorsque mon programme effectue une requete en bdd (via JDBC et OraclePreparedStatement avec bind variable), celle-ci s'effectue en moyenne en ~500ms. Ensuite, via sqldeveloper, je récupère cette requete dans la vue v$sql, puis je l'exécute (dans sqldeveloper). Celle-ci s'accomplie en moyenne en ~5-10ms.
Une nouvelle ligne est apparue dans v$sql (la colonne EXECUTION de la première n'a pas augmenté). Le sql est bien le meme, à l'espace près. De plus, la colonne SQL_ID est bien la meme pour les deux lignes, mais le ELAPSED_TIME/EXECUTION est très différent.
Lorsque je regarde la vue v$sql_plan, je vois deux plans d'exécutions différents corespondant au meme SQL_ID.
Afin de solutionner ce problème j'ai donc ajouté des hints dans mon programme, afin de forcer Oracle à utiliser le plan d'exécution qu'il calcule sous sqldeveloper, et j'obtiens le gain attendu.
Cependant, j'avoue ne pas comprendre d'où provient cette différence. Peut-etre du OraclePreparedStatement? Du fait que l'appli se connecte à travers un pool de connexions (je vois pas pourquoi, mais bon...)?
Ca m'inquiete un peu, car il y a d'autres requetes qui sont impactées, et j'aimerai donc comprendre d'où cela vient !
Merci d'avance.
PS: stats complètes calculées..
Partager