我需要获得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
答案 0 :(得分:1)
如果这是在Windows上运行,您可以使用Sysinternals的Process Explorer。只需转到会话所在的Oracle流程即可。你应该能够通过线程看到CPU%。我不是Oracle DBA,但我假设每个会话都是Windows上的一个线程。
如果这是Unix / Linux,那么会话也会运行一个新线程吗? Here是一个提及如何在Unix / Linux上获取该信息的链接。