|

Reprinted with Permission by Quest
Software May 2005
|
Average Write Time to Online Redo Logs
Tim Gorman, SageLogix
/**********************************************************************
* File: sp_avg_redo_write_time.sql
* Type: SQL*Plus script
* Author: Tim Gorman (SageLogix, Inc.)
* Date: 14-Feb-2005
*
* Description:
* Query to show average write time to online redo logs on a
* day-by-day as well as an hour-by-hour basis over time, using
* data in the STATSPACK repository...
*
* Modifications:
*********************************************************************/
set pagesize 100 linesize 80 trimout on trimspool on verify off pause off
set echo off feedback off timing off
col sort0 noprint
col day heading "Day"
col hr heading "Hour"
col sum_redo_writes format 999,999,990.00 heading "Sum # Redo|Write I/O Rqsts"
col sum_redo_write_time format 999,990.00 heading "Sum|Redo Write|Time (secs)"
col avg_redo_writes format 999,999,990.000 heading "Avg # Redo|Write I/O Rqsts|Per Sec"
col avg_redo_write_time format 990.00000000 heading "Avg|Redo Write|I/O Rqst|Time (secs)"
accept V_INSTANCE_NAME prompt "ORACLE_SID value (wildcards permitted): "
accept V_NBR_DAYS prompt "How many days of data to examine? "
spool sp_avg_redo_write_time
clear breaks computes
break on report
compute sum of sum_redo_writes on report
compute sum of sum_redo_write_time on report
compute avg of avg_redo_write_time on report
compute avg of avg_redo_writes on report
ttitle center 'Average Redo Write Time - Daily Summary' skip 1 line
select to_char(s.snap_time, 'YYYYMMDD') sort0,
to_char(s.snap_time, 'DD-MON') day,
sum(w.value) sum_redo_writes,
sum(t.value) sum_redo_write_time,
avg(w.value / t.value) avg_redo_writes,
avg(t.value / w.value) avg_redo_write_time
from (select dbid,
instance_number,
snap_id,
decode(greatest(value, lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id)),
value,
value - lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id),
value)/100 value
from stats$sysstat
where name = 'redo write time') t,
(select dbid,
instance_number,
snap_id,
decode(greatest(value, lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id)),
value,
value - lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id),
value) value
from stats$sysstat
where name = 'redo writes') w,
(select distinct dbid, instance_number
from stats$database_instance
where instance_name like '&&V_INSTANCE_NAME') i,
stats$snapshot s
where w.dbid = i.dbid
and w.instance_number = i.instance_number
and t.dbid = i.dbid
and t.instance_number = i.instance_number
and s.dbid = i.dbid
and s.instance_number = i.instance_number
and s.snap_time between trunc(sysdate - &&V_NBR_DAYS) and sysdate
and w.snap_id = s.snap_id
and t.snap_id = s.snap_id
and w.value > 0
and t.value > 0
group by to_char(s.snap_time, 'YYYYMMDD'),
to_char(s.snap_time, 'DD-MON')
order by sort0;
clear breaks computes
break on day skip 1 on report
compute sum of sum_redo_writes on day
compute sum of sum_redo_write_time on day
compute avg of avg_redo_write_time on day
compute avg of avg_redo_writes on day
ttitle center 'Average Redo Write Time - Hourly Summary' skip 1 line
select to_char(s.snap_time, 'YYYYMMDDHH24') sort0,
to_char(s.snap_time, 'DD-MON') day,
to_char(s.snap_time, 'HH24')||':00' hr,
sum(w.value) sum_redo_writes,
sum(t.value) sum_redo_write_time,
avg(w.value / t.value) avg_redo_writes,
avg(t.value / w.value) avg_redo_write_time
from (select dbid,
instance_number,
snap_id,
decode(greatest(value, lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id)),
value,
value - lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id),
value)/100 value
from stats$sysstat
where name = 'redo write time') t,
(select dbid,
instance_number,
snap_id,
decode(greatest(value, lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id)),
value,
value - lag(value,1,0) over (partition by dbid,
instance_number
order by snap_id),
value) value
from stats$sysstat
where name = 'redo writes') w,
(select distinct dbid, instance_number
from stats$database_instance
where instance_name like '&&V_INSTANCE_NAME') i,
stats$snapshot s
where w.dbid = i.dbid
and w.instance_number = i.instance_number
and t.dbid = i.dbid
and t.instance_number = i.instance_number
and s.dbid = i.dbid
and s.instance_number = i.instance_number
and s.snap_time between trunc(sysdate - &&V_NBR_DAYS) and sysdate
and w.snap_id = s.snap_id
and t.snap_id = s.snap_id
and w.value > 0
and t.value > 0
group by to_char(s.snap_time, 'YYYYMMDDHH24'),
to_char(s.snap_time, 'DD-MON'),
to_char(s.snap_time, 'HH24')||':00'
order by sort0;
spool off
ttitle off