Върнах се към темата с натоварването. Сума време мислих, но на края го измислих. Записвам си го хем да не забравя, хем да споделя. За съжаление сега нямам време да обясня как стигнах до тази заявка, може би по-късно.
Та въпроса е: трябва да се намери стойността на дадена системна статистика от AWR репортите (примерно използваното PGA). Да, ама не може да сравнявам стойността в 3 следобед с тази в 3 през нощта. За това искам да гледам само репорти, които са +/- 2.1 часа от сегашния момент. Т.е. в 3 през нощта ще гледам от 1 до 5 през нощта.
И ето я великата заявка:
select p.value
from dba_hist_pgastat p, dba_hist_snapshot s
where s.snap_id = p.snap_id
and p.name = 'total PGA allocated'
and s.end_interval_time > sysdate - 60
and abs(remainder(cast(s.end_interval_time as date)-sysdate, 1)) < 2.1/24;
Грубо казано действа така
- взема разликата между sysdate и датата на awr snapshot-а. Разликата е в дни. Действа за сравнение на всякакви дати, т.е. няма значение коя е по-нова
- отрязва само часовете (т.е. премахва цялата част - дните) с помощта на remainder. Красивото тук е, че действа и в "гранични" стойности, примерно в 1 през нощта ще вземе и 23 от предния ден (и обратно). Направо не вярвах, че ще се получи толкова елегантно! 🙂
- сравнява със зададения лимит, в случая 2.1 часа (2.1/24)
После този резултат може да се прекара през заявката, която далновидно си записах миналата година, за да се вадят изводи дали, аджеба, сме на "нормално" ниво или нещо не е наред.
Важно за успеха тук е да си пазим достатъчно стари awr репорти. Статистическия апарат, който ми подсказахте миналата година, работи добре при над 30 наблюдения.