2026-03-12 20:23:15
This commit is contained in:
106
vg/sptrends.sql
Normal file
106
vg/sptrends.sql
Normal file
@@ -0,0 +1,106 @@
|
||||
/**********************************************************************
|
||||
* File: sptrends.sql
|
||||
* Type: SQL*Plus script
|
||||
* Author: Tim Gorman (Evergreen Database Technologies, Inc.)
|
||||
* Date: 15-Jul-2003
|
||||
*
|
||||
* Description:
|
||||
* Query to display "trends" for specific statistics captured by
|
||||
* the STATSPACK package, and display summarized totals daily and
|
||||
* hourly as a deviation from average. The intent is to find the
|
||||
* readings with the greatest positive deviation from the average
|
||||
* value, as these are likely to be "periods of interest" for
|
||||
* further research...
|
||||
*
|
||||
* Modifications:
|
||||
* TGorman 02may04 corrected bug in LAG() OVER () clauses
|
||||
* TGorman 10aug04 changed "deviation" column from some kind of
|
||||
* weird "deviation from average" calculation to
|
||||
* a more straight-forward percentage ratio
|
||||
*********************************************************************/
|
||||
set echo off feedback off timing off pagesize 200 linesize 130 trimout on trimspool on verify off recsep off
|
||||
col sort0 noprint
|
||||
col day heading "Day"
|
||||
col hr heading "Hour"
|
||||
col value format 999,999,999,990 heading "Value"
|
||||
|
||||
accept V_NBR_DAYS prompt "How many days of data to examine? "
|
||||
prompt
|
||||
prompt
|
||||
prompt Some useful database statistics to search upon:
|
||||
select chr(9)||name name
|
||||
from v$statname
|
||||
order by 1;
|
||||
accept V_STATNAME prompt "What statistic do you want to analyze? "
|
||||
|
||||
col spoolname new_value V_SPOOLNAME noprint
|
||||
select replace(replace(replace(lower('&&V_STATNAME'),' ','_'),'(',''),')','') spoolname
|
||||
from dual;
|
||||
|
||||
spool sptrends_&&V_SPOOLNAME
|
||||
clear breaks computes
|
||||
col deviation format a100 heading "Percentage of total over all days"
|
||||
prompt
|
||||
prompt Daily trends for "&&V_STATNAME"...
|
||||
select sort0,
|
||||
day,
|
||||
value,
|
||||
rpad('*', round((value/sum(value) over ())*100, 0), '*') deviation
|
||||
from (select sort0,
|
||||
day,
|
||||
sum(value) value
|
||||
from (select to_char(ss.snap_time, 'YYYYMMDD') sort0,
|
||||
to_char(ss.snap_time, 'DD-MON') day,
|
||||
s.snap_id,
|
||||
s.name,
|
||||
nvl(decode(greatest(s.value, nvl(lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id),0)),
|
||||
s.value, s.value - lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id),
|
||||
s.value), 0) value
|
||||
from stats$sysstat s,
|
||||
stats$snapshot ss
|
||||
where ss.snap_id = s.snap_id
|
||||
and ss.dbid = s.dbid
|
||||
and ss.instance_number = s.instance_number
|
||||
and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate
|
||||
and s.name = '&&V_STATNAME')
|
||||
group by sort0,
|
||||
day)
|
||||
order by sort0;
|
||||
|
||||
clear breaks computes
|
||||
break on day skip 1 on report
|
||||
col deviation format a100 heading "Percentage of total over all hours for each day"
|
||||
prompt
|
||||
prompt Daily/hourly trends for "&&V_STATNAME"...
|
||||
select sort0,
|
||||
day,
|
||||
hr,
|
||||
value,
|
||||
rpad('*', round((value/sum(value) over (partition by day))*100,0), '*') deviation
|
||||
from (select sort0,
|
||||
day,
|
||||
hr,
|
||||
name,
|
||||
sum(value) value
|
||||
from (select to_char(ss.snap_time, 'YYYYMMDDHH24') sort0,
|
||||
to_char(ss.snap_time, 'DD-MON') day,
|
||||
to_char(ss.snap_time, 'HH24')||':00' hr,
|
||||
s.snap_id,
|
||||
s.name,
|
||||
nvl(decode(greatest(s.value, nvl(lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id),0)),
|
||||
s.value, s.value - lag(s.value) over (partition by s.dbid, s.instance_number order by s.snap_id),
|
||||
s.value), 0) value
|
||||
from stats$sysstat s,
|
||||
stats$snapshot ss
|
||||
where ss.snap_id = s.snap_id
|
||||
and ss.dbid = s.dbid
|
||||
and ss.instance_number = s.instance_number
|
||||
and ss.snap_time between (sysdate - &&V_NBR_DAYS) and sysdate
|
||||
and s.name = '&&V_STATNAME')
|
||||
group by sort0,
|
||||
day,
|
||||
hr,
|
||||
name)
|
||||
order by sort0;
|
||||
spool off
|
||||
set verify on recsep each
|
||||
Reference in New Issue
Block a user