http___blog.yavor.info__m_201011_1.xml
http___blog.yavor.info__m_201011_lang_en.xml
1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 11.1 11.2 11.3 12.1 12.2 12.3 13.1 14.1 15.1 15.2
Върнах се към темата с натоварването. Сума време мислих, но на края го измислих. Записвам си го хем да не забравя, хем да споделя. За съжаление сега нямам време да обясня как стигнах до тази заявка, може би по-късно. Та въпроса е: трябва да се намери стойността на дадена системна статистика от 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 наблюдения.
1.1 1.2 1.3 2.1 2.2 2.3 2.4 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 11.1 11.2 11.3 12.1 13.1 13.2 13.3 13.4 14.1 15.1 16.1 16.2
I’m back at the system load topic. I was thinking about this quite some time, and now I have it. I will post it here – to share and to remember. The task is: find the values of some system statistic based on the AWR reports (in this example – PGA usage) – for the last, say, 60 days. It wouldn’t be right to compare the load at 3 PM to the one at 3 AM. So I want to check only reports, standing +/- 2.1 hours from the current time of day. In other words, st 3 AM I want the values from 1 to 5 AM during the last 60 nights. And here is the query: 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; It works like this - take the difference between sysdate and the date of the awr snapshot. The result is in days. Works for all dates - older and newer then the current - get only the time (in other words, repove the "day" part) using remainder. The beauty of this function is, it works in "limit" cases. E.g. in 1 AM you can take 11 PM from the day before (and vise versa). I did not expect to have such an easy and elegant solution! - compare with the given limit, in our case - 2.1 hours (2.1/24) The you can run the resulting number through the query, which I posted last year, to check if the current value is "normal" or suspicious. The key here is to keep enough AWR reports history. The statistics I use will work only for 30 or more "observations" (as someone noted last year)