@@header

/*
*
*  Author    : Vishal Gupta
*  Purpose   : Display load profile from AWR
*              All figures delta between two consecutive snapshots
*  Parameter : 1 - InstanceNumber (Use % for all instances)
*              2 - No of days
*  
*             dbid and instancenumber are optional. 
*             If not passes then it takes current instance's dbid and instancenumber
*
*  Revision History:
*  ===================
*  Date       Author        Description
*  ---------  ------------  -----------------------------------------
*  04-Apr-12  Vishal Gupta  First Draft
*  
*/



/************************************
*  INPUT PARAMETERS
************************************/
UNDEFINE  INST_ID
UNDEFINE  days

DEFINE INST_ID="&&1"
DEFINE days="&&2"  


COLUMN  _INST_ID               NEW_VALUE  INST_ID                NOPRINT
COLUMN  _days                  NEW_VALUE  days                   NOPRINT

set term off
SELECT DECODE('&&INST_ID','','%','&&INST_ID')   "_INST_ID"
     , DECODE('&&days','','7','&&days')                         "_days"
FROM DUAL;
set term on


/************************************
*  CONFIGURATION PARAMETERS
************************************/

set pages 2000


DEFINE COUNT_FORMAT="999,999"

--DEFINE COUNT_DIVIDER="1"
--DEFINE COUNT_HEADING="#"
DEFINE COUNT_DIVIDER="1000"
DEFINE COUNT_HEADING="'000s"

DEFINE BYTES_FORMAT="99999"

--DEFINE BYTES_DIVIDER="1024"
--DEFINE BYTES_HEADING="KB"
--DEFINE BYTES_DIVIDER="1024/1024"
--DEFINE BYTES_HEADING="MB"
DEFINE BYTES_DIVIDER="1024/1024/1024"
DEFINE BYTES_HEADING="GB"

DEFINE TIME_FORMAT=9,999
DEFINE TIME_DIVIDER="1"
DEFINE TIME_HEADING="sec"


PROMPT 
PROMPT *****************************************************
PROMPT ***  P H Y S I C A L    R E A D S    T R E N D    ***
PROMPT *****************************************************

COLUMN end_interval_day HEADING "Date|DD-MON-YY Day" FORMAT a14
COLUMN DayTotal HEADING "DayTotal|(&BYTES_HEADING)"   FORMAT 9,999,999
COLUMN h00     HEADING "h00|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h01     HEADING "h01|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h02     HEADING "h02|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h03     HEADING "h03|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h04     HEADING "h04|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h05     HEADING "h05|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h06     HEADING "h06|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h07     HEADING "h07|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h08     HEADING "h08|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h09     HEADING "h09|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h10     HEADING "h10|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h11     HEADING "h11|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h12     HEADING "h12|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h13     HEADING "h13|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h14     HEADING "h14|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h15     HEADING "h15|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT 
COLUMN h16     HEADING "h16|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h17     HEADING "h17|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h18     HEADING "h18|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h19     HEADING "h19|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h20     HEADING "h20|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h21     HEADING "h21|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h22     HEADING "h22|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT
COLUMN h23     HEADING "h23|(&BYTES_HEADING)"   FORMAT &BYTES_FORMAT

BREAK ON REPORT

COMPUTE MIN MAX AVG OF DayTotal ON REPORT 
COMPUTE MIN MAX AVG OF h00 ON REPORT 
COMPUTE MIN MAX AVG OF h01 ON REPORT 
COMPUTE MIN MAX AVG OF h02 ON REPORT 
COMPUTE MIN MAX AVG OF h03 ON REPORT 
COMPUTE MIN MAX AVG OF h04 ON REPORT 
COMPUTE MIN MAX AVG OF h05 ON REPORT 
COMPUTE MIN MAX AVG OF h06 ON REPORT 
COMPUTE MIN MAX AVG OF h07 ON REPORT 
COMPUTE MIN MAX AVG OF h08 ON REPORT 
COMPUTE MIN MAX AVG OF h09 ON REPORT 
COMPUTE MIN MAX AVG OF h10 ON REPORT 
COMPUTE MIN MAX AVG OF h11 ON REPORT 
COMPUTE MIN MAX AVG OF h12 ON REPORT 
COMPUTE MIN MAX AVG OF h13 ON REPORT 
COMPUTE MIN MAX AVG OF h14 ON REPORT 
COMPUTE MIN MAX AVG OF h15 ON REPORT 
COMPUTE MIN MAX AVG OF h16 ON REPORT 
COMPUTE MIN MAX AVG OF h17 ON REPORT 
COMPUTE MIN MAX AVG OF h18 ON REPORT 
COMPUTE MIN MAX AVG OF h19 ON REPORT 
COMPUTE MIN MAX AVG OF h20 ON REPORT 
COMPUTE MIN MAX AVG OF h21 ON REPORT 
COMPUTE MIN MAX AVG OF h22 ON REPORT 
COMPUTE MIN MAX AVG OF h23 ON REPORT 


WITH snap
AS
 (SELECT s.dbid
       , s.instance_number
       , s.snap_id
       , LAG (s.snap_id) OVER (PARTITION BY s.dbid, s.instance_number ORDER BY s.dbid, s.instance_number, s.snap_id) prev_snap_id
       , s.end_interval_time
   FROM  dba_hist_snapshot s
       , v$database d
  WHERE s.dbid = d.dbid
    AND s.instance_number LIKE '&inst_id'
    AND s.end_interval_time > TRUNC(systimestamp) - &days
 )
, awr_stats as
( 
SELECT TRUNC(snap.end_interval_time) end_interval_day 
     , TO_CHAR(snap.end_interval_time,'hh24') end_interval_hour
     , ROUND(( GREATEST(ss2.value,NVL(ss1.value,0)) -- In case of instance bounce ss2.value will be lower than ss1.value
            - NVL(ss1.value,ss2.value)           -- In cases where there is no previous snapshot, ss1.value will be null.
     ) * p.value / &BYTES_DIVIDER) value_delta
FROM snap 
   , dba_hist_sysstat ss1
   , dba_hist_sysstat ss2
   , dba_hist_stat_name sn
   , v$system_parameter p
where p.name = 'db_block_size'
and ss1.dbid = snap.dbid
and ss1.instance_number = snap.instance_number
and ss1.snap_id = snap.prev_snap_id
and ss2.dbid = snap.dbid
and ss2.instance_number = snap.instance_number
and ss2.snap_id = snap.snap_id
and ss1.stat_id = ss2.stat_id
and ss1.dbid = sn.dbid
and ss1.stat_id = sn.stat_id
and sn.stat_name in (
                'physical reads'
                )
)
SELECT TO_CHAR(s.end_interval_day,'DD-Mon-YY Dy') end_interval_day
     , SUM(s.value_delta) DayTotal
     , SUM(DECODE(s.end_interval_hour,'00',s.value_delta,0)) h00
     , SUM(DECODE(s.end_interval_hour,'01',s.value_delta,0)) h01
     , SUM(DECODE(s.end_interval_hour,'02',s.value_delta,0)) h02
     , SUM(DECODE(s.end_interval_hour,'03',s.value_delta,0)) h03
     , SUM(DECODE(s.end_interval_hour,'04',s.value_delta,0)) h04
     , SUM(DECODE(s.end_interval_hour,'05',s.value_delta,0)) h05
     , SUM(DECODE(s.end_interval_hour,'06',s.value_delta,0)) h06
     , SUM(DECODE(s.end_interval_hour,'07',s.value_delta,0)) h07
     , SUM(DECODE(s.end_interval_hour,'08',s.value_delta,0)) h08
     , SUM(DECODE(s.end_interval_hour,'09',s.value_delta,0)) h09
     , SUM(DECODE(s.end_interval_hour,'10',s.value_delta,0)) h10
     , SUM(DECODE(s.end_interval_hour,'11',s.value_delta,0)) h11
     , SUM(DECODE(s.end_interval_hour,'12',s.value_delta,0)) h12
     , SUM(DECODE(s.end_interval_hour,'13',s.value_delta,0)) h13
     , SUM(DECODE(s.end_interval_hour,'14',s.value_delta,0)) h14
     , SUM(DECODE(s.end_interval_hour,'15',s.value_delta,0)) h15
     , SUM(DECODE(s.end_interval_hour,'16',s.value_delta,0)) h16
     , SUM(DECODE(s.end_interval_hour,'17',s.value_delta,0)) h17
     , SUM(DECODE(s.end_interval_hour,'18',s.value_delta,0)) h18
     , SUM(DECODE(s.end_interval_hour,'19',s.value_delta,0)) h19
     , SUM(DECODE(s.end_interval_hour,'20',s.value_delta,0)) h20
     , SUM(DECODE(s.end_interval_hour,'21',s.value_delta,0)) h21
     , SUM(DECODE(s.end_interval_hour,'22',s.value_delta,0)) h22
     , SUM(DECODE(s.end_interval_hour,'23',s.value_delta,0)) h23
  FROM awr_stats s
GROUP BY s.end_interval_day
ORDER BY s.end_interval_day 
/

UNDEFINE days 
UNDEFINE INST_ID


@@footer
