Bonjour à tous,
Je travaille actuellement sur une base 9.2.0.1 et je rencontre un problème de performance très bizarre sur une procédure particulière, mais surtout sur un ordre particulier de cette procédure.
Voici mon soucis :
Lorsque je lance ma procédure PL/SQL suite à un arrêt/relance de ma
base de donnée, elle s'exécute en 3min. Si je lance la même procédure
juste après un premier passage, même deux jours après, elle met alors
20min à s'exécuter.
Après le lancement des traces Oracle, je me suis aperçu qu'un ordre en
particulier, dont le plan d'exécution est affiché comme étant identique,
consommait dans un cas 2' cpu (2052 accès disque) et dans le
second cas 1000' cpu (20 millions d'accès disque). Il s'agit de l'ordre
suivant :
Le plan d'exécution indique qu'Oracle passe bien par l'index positionné
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT SUM(a.montant) FROM elemp a, regroup b WHERE a.elem=b.elem AND a.societe=:b4 AND a.idpeop=:b3 AND a.date=:b2 AND a.type='R' AND a.temoin='N' AND b.regrp=:b1 GROUP BY b.regrp
sur la table dans les deux cas. Encore une petite chose, la table est
déclarée en PARALLEL.
Travaillant sur Oracle depuis déjà quelques temps, je dois reconnaître que je suis assez désarmé face à ce problème. En effet, je suis passé par tous les paramètres d'optimisation que je connais, mais là, çà fait déjà 4 jours que je suis dessus et je commence à être sec
-------------------------------------------------------------------------------
Edit :
Encore une petite précision, je ne lance pas la procédure toute seule. En fait, j'exécute des opérations d'optimisations à l'intérieur d'un script. C'est ce script que je lance dans les deux cas.
Enfin, mon sentiment, au vue du nombre de lignes interrogé dans chacun des cas, est qu'Oracle semble lire des lignes "fantomes", inexistantes, car détruites au début de mon script (puis lancement d'un commit), avant toutes les opérations d'optimisations.
Partager