获取Oracle会话使用的CPU%

时间:2014-08-11 17:28:41

标签: performance oracle monitoring

我需要获得Oracle会话消耗的CPU百分比。

我尝试了以下脚本,这总计了所有会话消耗的CPU,然后计算每个活动会话消耗的CPU总量。但这并不能说明活动会话消耗了机器上CPU的百分比。

举个例子,假设会话消耗了所有会话消耗的CPU总量的10%。但实际上这只是服务器上可用CPU功率的2%。我需要得到2%的数字。

WITH TOTAL_CPU AS
(
select 
   sum(VALUE/100) cpu_usage_seconds
from
   v$session ss, 
   v$sesstat se, 
   v$statname sn
where
   se.STATISTIC# = sn.STATISTIC#
and
   NAME like '%CPU used by this session%'
and
   se.SID = ss.SID
--and 
   --ss.status='ACTIVE'
and 
  ss.username is not null)
select * from 
(
  select 
     ss.username || '-' || se.SID "Session",
     --VALUE/100 cpu_usage_seconds,
     sum(round(VALUE/(select * from TOTAL_CPU),2)) as CPU,
     (select * from TOTAL_CPU) as Total
  from
     v$session ss, 
     v$sesstat se, 
     v$statname sn
  where
     se.STATISTIC# = sn.STATISTIC#
  and
     NAME like '%CPU used by this session%'
  and
     se.SID = ss.SID
  and 
     ss.status='ACTIVE'
  and 
     ss.username is not null
  and value > 0
  group by ss.username, se.SID  
  order by CPU desc
)
where rownum < 11
order by CPU desc

1 个答案:

答案 0 :(得分:1)

如果这是在Windows上运行,您可以使用Sysinternals的Process Explorer。只需转到会话所在的Oracle流程即可。你应该能够通过线程看到CPU%。我不是Oracle DBA,但我假设每个会话都是Windows上的一个线程。

如果这是Unix / Linux,那么会话也会运行一个新线程吗? Here是一个提及如何在Unix / Linux上获取该信息的链接。