col TEVENT for a30
col SQLID_LIST for a50
col LGRD_OBJS for a20
col PHYRD_OBJS for a30
set lin 450
with dbtime as (select
inst,snap_id, max(decode(stat_name,'DB time',value/1000000)) DBtime,
round(max(decode(stat_name,'DB CPU',value/1000000)) ,0) DB_CPU,
round(max(decode(stat_name,'sql execute elapsed time',value/1000000)),0)
SQLExeTime, round(max(decode(stat_name,'parse time elapsed',value/1000000)),0) parsetime,
round(max(decode(stat_name,'hard parse elapsed time',value/1000000)) ,0)
hardparsetime , round(max(decode(stat_name,'background elapsed time',value/1000000)) ,0) BGTime,
round(max(decode(stat_name,'background cpu time',value/1000000)) ,0) BGCPU,
round(max(decode(stat_name,'RMAN cpu time (backup/restore)',value/1000000)) ,0) RmanTim
--round(max(decode(stat_name,'Backup: MML create a backup',value/1000000)) ,2) BkUpTime
from (
select dht.instance_number
inst, dht.snap_id, STAT_NAME, value - lag( value) over ( partition by startup_time, stat_name
order by dht.instance_number,dht.snap_id ) value
from dba_hist_sys_time_model
dht, dba_hist_snapshot dh
where dht.snap_id between (
&&begin_snap_id - 1) and &&end_snap_id and dht.snap_Id = dh.snap_id and dht.instance_number = dh.instance_Number and stat_name in ( 'sql execute elapsed time', 'background elapsed time', 'background cpu time', 'parse time elapsed', 'hard parse elapsed time', 'RMAN cpu time (backup/restore)', 'Backup: MML create a backup', 'DB time', 'DB CPU') order by snap_Id )
where snap_id >
&&begin_snap_id group by inst,snap_id ),
topevent as (
select inst, snap_id,
rpad(substr(event_name,1,22),22,' ') || '-' ||
to_char(FGTime_waited,'99999') TEvent
from (
select inst, snap_id,
event_name,round(timewaited/1000000) FGTime_waited, rank () over ( partition by inst,snap_id order by timewaited/1000000 desc ) as rnk
from (
select dht.instance_number
inst, dht.snap_id,event_name, sum(TIME_WAITED_MICRO_FG) - lag( sum(TIME_WAITED_MICRO_FG)) over ( partition by event_name order by dht.instance_number,dht.snap_id ) timewaited
from dba_hist_system_event
dht
where dht.snap_id between &&begin_snap_id
-1 and &&end_snap_id and wait_class !='Idle' group by dht.instance_number, dht.snap_id, event_name )
where timewaited > 0 and snap_id > &&begin_snap_id -1 )
where rnk < 2 ), osloadavg
as (
select inst, snap_id, max(load) load, to_char( max(busy_time)/( max(idle_time)+ max(busy_time) ) * 100,'999.99') busy_time, to_char( max(idle_time)/( max(idle_time)+ max(busy_time) ) * 100,'999.99') Idle_time, to_char( max(iowait)/( max(idle_time)+ max(busy_time) ) * 100,'999.99') WIO_time
from (
select dos.instance_number
inst, snap_id, stat_name, decode(stat_name,'LOAD',value) Load,
decode(stat_name,'BUSY_TIME', round( (
(value - lag( value) over ( partition by stat_name order by
dos.instance_number,dos.snap_id ) )/100),2)) busy_time, decode(stat_name,'IDLE_TIME', round( ( (value - lag( value) over ( partition by stat_name order by
dos.instance_number,dos.snap_id ) )/100),2)) Idle_time, decode(stat_name,'IOWAIT_TIME', round( ( (value - lag( value) over ( partition by stat_name order by dos.instance_number,dos.snap_id ) )/100),2))
iowait
from dba_hist_osstat dos
where stat_name in ( 'LOAD', 'BUSY_TIME','IDLE_TIME','IOWAIT_TIME') and dos.snap_id between &&begin_snap_id-1 and &&end_snap_id )
where snap_id >
&&begin_snap_id -1 group by inst, snap_id
-- select dos.instance_number inst, snap_id, round(value,2) load
--from dba_hist_osstat dos
--where stat_name ='LOAD'
--and dos.snap_id between &&begin_snap_id and &&end_snap_id
), sqlstat as (
select inst, snap_id,
listagg(sql_id||' - '||DML ||'- '||rtrim(to_char(exe,'9999')) ,', ') within group ( order by rnk) as sqlid_list
from (
select inst,snap_id, sql_id ,
module ,rnk,exe,DML, ROW_NUMBER() OVER (partition by inst,snap_id ORDER BY inst,snap_id ) AS RN
from (
SELECT instance_number inst,
snap_id, e.sql_id ,module,elapsed_time_delta ,to_char(executions_delta,'9999999') exe, rank () over ( partition by instance_number,snap_id order by elapsed_time_delta desc) as rnk, decode(COMMAND_TYPE,2,'I',3,'S', 6,'U',7,'D',47,'PL',189,'M', command_type) DML
FROM dba_hist_sqlstat e,
dba_hist_sqltext t
where e.snap_id between &&begin_snap_id
and &&end_snap_id and e.sql_id = t.sql_id ) )
where rnk<3 and rn < 3 group by inst, snap_id ),
SEGSTAT AS (
select snap_id, dataobj#,
obj#, LOGICAL_READS_DELTA LgRd, PHYSICAL_READS_DELTA PhyRd,
PHYSICAL_WRITES_DELTA PhyWrt, DB_BLOCK_CHANGES_DELTA BlkChg,
GC_CR_BLOCKS_RECEIVED_DELTA GCRced, rank () over ( partition by snap_id order by DB_BLOCK_CHANGES_DELTA desc ) as bcrnk, rank () over ( partition by snap_id order by LOGICAL_READS_DELTA desc ) as lgRdrnk, rank () over ( partition by snap_id order by PHYSICAL_READS_DELTA desc ) as PhyRdrnk, rank () over ( partition by snap_id order by PHYSICAL_WRITES_DELTA desc ) as PhyWrtrnk, rank () over ( partition by snap_id order by BUFFER_BUSY_WAITS_DELTA
desc ) as bufbusyrnk
from dba_hist_seg_stat
where snap_id between &&begin_snap_id
and &&end_snap_id and instance_number =userenv('instance') ), LGSTAT AS (
select snap_id,
listagg(substr(object_name,1,25)||' ',',') within group ( order by lgRdrnk) as LgRd_objs
from (
select snap_id, dataobj#,obj#
, LgRd,lgrdrnk
from segstat
where lgrdrnk < 2 ) a,
dba_hist_seg_stat_obj b
where a.dataobj# = b.dataobj#
and a.obj# = b.obj# group by snap_id ), PHYSTAT AS (
select snap_id,
listagg(substr(object_name,1,30)||' ',',') within group ( order by PhyRdrnk) as PhyRd_objs
from (
select snap_id, dataobj#,obj#
, PhyRd,PhyRdRnk
from segstat
where phyrdrnk < 2 ) a,
dba_hist_seg_stat_obj b
where a.dataobj# = b.dataobj#
group by snap_id )
select dbtime.inst,
dbtime.snap_id, to_char(begin_interval_time,'DD-Mon HH24:MI') snapetime,
-- dbtime.dbtime,
-- osloadavg.load,
tevent,
-- waitclass_list,
sqlid_list , lgRd_objs , PhyRd_objs
from dbtime, sqlstat
,lgstat, phystat, topevent, osloadavg, dba_hist_snapshot dhs
where dbtime.inst =
dhs.instance_number and dbtime.inst = sqlstat.inst and dbtime.inst = topevent.inst and dbtime.inst = osloadavg.inst and dbtime.snap_id = dhs.snap_id and dbtime.snap_id = sqlstat.snap_id and dbtime.snap_id = osloadavg.snap_id and dbtime.snap_id = topevent.snap_id and dbtime.snap_id = lgstat.snap_id and dbtime.snap_id = phystat.snap_id order by dbtime.inst, dbtime.snap_id
No comments:
Post a Comment