Наскоро постнах една заявка, която може да даде средното натоварване на базата по дни, седмици и месеци. Работи чудесно… докато не го пуснах върху RAC база.
При RAC има по един ред за всеки node и моята стратегия да вадя резултатите от предния ред водят до покъртителни резултати. Така че – ето новата, RAC-aware версия:
select trunc(this_day, 'MONTH'), avg(day_db_time), sum(cnt) scnt
from (select this_day, count(1) cnt,
sum(case
when snap_db_time > 0 then
snap_db_time/1000/1000/60/60/24
else
null
end) day_db_time
from (select trunc(begin_interval_time) this_day, tm.snap_id,
value - lag(value, 1) over(order by tm.instance_number, tm.snap_id) snap_db_time
from dba_hist_sys_time_model tm, dba_hist_snapshot s
where tm.stat_name = 'DB CPU'
and s.snap_id = tm.snap_id
and s.instance_number = tm.instance_number
and s.begin_interval_time > add_months(trunc(sysdate, 'YEAR'), -24)
and s.begin_interval_time < trunc(sysdate, 'MONTH')
)
group by this_day)
group by trunc(this_day, 'MONTH')
order by 1
Единствената разлика е, че внимавам кой instance е на предния ред, да не вадя някакви глупости. Работи чудесно и за single instance бази.