Wednesday, May 5, 2021

dbtime

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