Bonjour,

Je cherche à récupérer des statistiques de AWR sur les requêtes SQL mais je récupère des données étranges.

La table DBA_HIST_SQLSTAT donne le temps CPU utilisé par un curseur particulier (CPU_TIME_TOTAL). Ce temps est un temps cumulé depuis le démarrage de l'instance selon la doc Oracle. Donc mon raisonnement est le suivant :

Le temps CPU utilisé par la requête entre 2 snapshots est : CPU_TIME_TOTAL de fin - CPU_TIME_TOTAL de début.

Mais je me retrouve alors avec des temps négatifs !
Voilà un exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  s.SNAP_ID,
  h.STARTUP_TIME,
  SQL_ID,
  PLAN_HASH_VALUE,
  CPU_TIME_TOTAL*POWER(10,-6) "CPU_TIME_TOTAL",
  ELAPSED_TIME_TOTAL*POWER(10,-6) "ELAPSED_TIME_TOTAL"
FROM
  DBA_HIST_SQLSTAT s,
  DBA_HIST_SNAPSHOT h
WHERE s.SNAP_ID IN (431, 432, 433)
AND SQL_ID='7ca0jht73uv92'
AND s.SNAP_ID=h.SNAP_ID
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
   SNAP_ID STARTUP_TIME                   SQL_ID        PLAN_HASH_VALUE CPU_TIME_TOTAL ELAPSED_TIME_TOTAL
---------- ------------------------------ ------------- --------------- -------------- -------------
       431 11/06/08 14:33:43,000          7ca0jht73uv92       552933365     221,775941         258,019053
       432 11/06/08 14:33:43,000          7ca0jht73uv92       552933365     274,695173         315,785084
       433 11/06/08 14:33:43,000          7ca0jht73uv92       552933365      11,045736          18,800089
Si je prend comme intervalle les snap 432-433, la requête à consommé un temps CPU négatif (la requête executée 10s avant de se lancer ).
Je précise que j'ai plusieurs requêtes qui génère des conso. CPU négatives et pas qu'une seule... et que les valeurs négatives sont aussi pour le nombre d'exécution, de parse etc...

Est-ce que quelqu'un à une explication ?


Merci