column f_days new_value v_days
select &days f_days from dual;
column f_secs new_value v_secs
select 900 f_secs from dual;
--select &seconds f_secs from dual;
column f_bars new_value v_bars
select 5 f_bars from dual;
column aveact format 999.99
column f_graph new_value v_graph
select 30 f_graph from dual;
column graph format a30
column total format 99999
column npts format 99999
select
to_char(to_date(tday||' '||tmod*&v_secs,'YYMMDD SSSSS'),'DD-MON HH24:MI:SS') tm,
samples npts,
total/samples aveact,
substr(
substr(substr(rpad('+',round((cpu*&v_bars)/samples),'+') ||
rpad('-',round((waits*&v_bars)/samples),'-') ||
rpad(' ',p.value * &v_bars,' '),0,(p.value * &v_bars)) ||
p.value ||
substr(rpad('+',round((cpu*&v_bars)/samples),'+') ||
rpad('-',round((waits*&v_bars)/samples),'-') ||
rpad(' ',p.value * &v_bars,' '),(p.value * &v_bars),10) ,0,30)
,0,&v_graph)
graph,
-- total,
cpu,
waits
from (
select
to_char(sample_time,'YYMMDD') tday
, trunc(to_char(sample_time,'SSSSS')/&v_secs) tmod
, sum(decode(session_state,'ON CPU',1,decode(session_type,81,0,1))) total
, (max(sample_id) - min(sample_id) + 1 ) samples
, sum(decode(session_state,'ON CPU' ,1,0)) cpu
, sum(decode(session_state,'WAITING',1,0)) -
sum(decode(session_type,81,decode(session_state,'WAITING',1,0))) waits
/* for waits I want to subtract out the BACKGROUND
but for CPU I want to count everyon */
from
sash
where sample_time > sysdate - &v_days
group by trunc(to_char(sample_time,'SSSSS')/&v_secs),
to_char(sample_time,'YYMMDD')
order by
to_char(sample_time,'YYMMDD'),
trunc(to_char(sample_time,'SSSSS')/&v_secs)
) ash,
sash_params p
where p.name='cpu_count'
order by to_date(tday||' '||tmod*&v_secs,'YYMMDD SSSSS')
/