Estou tentando rastrear as diferentes classes de tempo de espera para as sessões atuais do Oracle, mas devo estar entendendo mal alguma coisa. Quando eu comparo o sum(time_waited)/1000
para uma determinada sessão em gv$session_wait_class
seu valor muitas vezes maior que o de seconds_in_wait
e gv$session
às vezes até maior que o seu last_call_et
que eu pensei que seria o tempo total...
O que estou perdendo aqui? Por que eles não são iguais? Estou comparando números com esta consulta:
select last_call_et,wait_time,seconds_in_wait,wait_time_micro/1000000,
(SELECT SUM(time_waited)
FROM gv$session_wait_class ot WHERE
ot.sid = ses.sid
AND ot.serial# = ses.serial#
AND ot.inst_id = ses.inst_id
)/1000 as wait_time_class from gv$session ses where sql_id is not null;
Da descrição de
v$session
:Essas não são medidas cumulativas, elas estão relacionadas apenas ao evento de espera atual ou último.
v$session_wait_class
por outro lado, resume as vezes que uma sessão esteve em diferentes classes de espera.Portanto, é compreensível que os tempos indicados em
[g]v$session_wait_class
sejam maiores do que os que você está vendo em[g]v$session
.O oposto também pode ser verdade, dependendo de quando uma espera é contabilizada na visualização da classe de espera. Se for contabilizado assim que o evento de espera terminar e não dinamicamente ( acho que é isso que acontece), a espera atual pode ser maior que a soma das esperas anteriores.