Bonjour,
j'ai fait une procédure stockée et afin d'optimiser ce traitement j'ai mis une trace SQL que j'ai analysé avec Tkprof.
Hors il y a un résultat concernant une requete qui me semble bizarre :
SELECT INST_PROD_ID
FROM PS_RF_INST_PROD
WHERE SETID = :b3
AND BO_ID_CUST = :b2
AND PRODUCT_ID = :b1
AND INST_PROD_STATUS = 'INS'
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1500000 61.40 70.10 0 0 0 0
Fetch 1500000 18171.59 5852.31 0 3188798241 0 1390000
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3000001 18233.00 5922.41 0 3188798241 0 1390000
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: 48 (D32RSBX) (recursive depth: 1)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT GOAL: CHOOSE
0 TABLE ACCESS (BY INDEX ROWID) OF 'PS_RF_INST_PROD'
0 INDEX (RANGE SCAN) OF 'PS2RF_INST_PROD' (NON-UNIQUE)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
latch free 8 0.18 0.40
Ca semble correct car il ya un seul parse et le plan d'execution utilise bien un index.
Mais Pourquoi le elapsed est inférieur au CPU au niveau du fetch?
Ce n'est pas du tout logique. Je tiens a préciser que l'index utilisé 'PS2RF_INST_PROD' n'est pas discriminant car les analyses (statistiques) sur les tables n'ont pas été effectuées.
Néanmoins l'elapsed ne devrait il pas etre superieur au CPU
De plus question annexe:
A la fin du Tkprof il y a la le temps qu'a durée la procédure, et ca me donne dans les 19000 secondes (avec les temps d'attente), or la procédure à réellement durée 31181 sec. Pourquoi cette différence dans la durée?
Y a t'il des temps qui ne sont pas comptabilisés
Merci par avance pour vos réponses
Partager