# ASH script
```
-- Top 3 wait evnet
select ashh.ashtime, inst_id,
max(decode(seq,1, ashh.wait_event||' -> ' ,''))|| max(decode(seq,2, ashh.wait_event||' -> ',''))|| max(decode(seq,3, ashh.wait_event||' ','')) wait_evnt ,
max(decode(seq,1, ashh.session_cnt||' -> ' ,''))|| max(decode(seq,2, ashh.session_cnt||' -> ',''))|| max(decode(seq,3, ashh.session_cnt||' ','')) wait_evnt_cnt
from (select /*+ parallel 4 */
to_char(ash.sample_time, 'YYYY-MM-DD HH24:MI') ashtime,
ash.instance_number inst_id,
decode(ash.event, null, 'CPU Time', ash.event) wait_event,
ash.session_state session_state,
count(*) session_cnt,
row_number() over(partition by instance_number, to_char(ash.sample_time, 'YYYY-MM-DD HH24:MI') order by count(*) desc) seq
from dba_hist_active_sess_history ash
where ash.sample_time between
to_date('04/17 19:30', 'MM/DD HH24:MI') and
to_date('04/18 06:00', 'MM/DD HH24:MI')
group by to_char(ash.sample_time, 'YYYY-MM-DD HH24:MI'),
ash.instance_number,
session_state,
ash.event) ashh
where ashh.seq <= 3
group by ashh.ashtime, inst_id
order by 2,1 ;
-- Top SQL
select A.*
from (
select to_char(sample_time, 'YYYY-MM-DD HH24:MI') HIS_TIME, instance_number inst_id,
row_number () over (partition by to_char(sample_time, 'YYYY-MM-DD HH24:MI'),instance_number order by sum(decode(ash.session_state,'ON CPU',1,1)) desc ) as SEQ,
decode(ash.sql_id,null, program, ash.sql_id) sql_id,ash.SQL_PLAN_HASH_VALUE Plan_hash,
ash.sql_opname type,
sum(decode(ash.session_state,'ON CPU',1,0)) "CPU",
sum(decode(ash.session_state,'WAITING',1,0)) -
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "WAIT" ,
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "IO" ,
sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"
from dba_hist_active_sess_history ash
where ash.sample_time between to_date('04/17 20:00', 'MM/DD HH24:MI') and to_date('04/18 06:00', 'MM/DD HH24:MI')
group by instance_number, to_char(sample_time, 'YYYY-MM-DD HH24:MI') , decode(ash.sql_id,null, program, ash.sql_id) ,ash.SQL_PLAN_HASH_VALUE ,ash.sql_opname ) A
where A.seq <=5
order by inst_id, HIS_TIME ;
-- gc wait event Top object
select A.*
from (
select instance_number inst_id , substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0' ash_time,
decode(o.owner||'.'||object_name||'.'||object_type,'..',ash.program,o.owner||'.'||object_name||'.'||object_type) objname ,
-- ash.event,
round(ratio_to_report(count(*)) over(partition by substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0' ) * 100,1) as raitio ,
row_number () over (partition by substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0' order by sum(decode(ash.session_state,'ON CPU',1,1)) desc ) as SEQ,
sum(decode(ash.session_state,'ON CPU',1,0)) "CPU",
sum(decode(ash.session_state,'WAITING',1,0)) -
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "WAIT" ,
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "IO" ,
sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"
from dba_hist_active_sess_history ash , dba_objects o
where sample_time between to_date('04/18 02:00', 'MM/DD HH24:MI') and to_date('04/18 05:30', 'MM/DD HH24:MI')
and ash.current_obj#=o.object_id(+)
and ash.event like 'gc%'
group by instance_number , substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0' ,decode(o.owner||'.'||object_name||'.'||object_type,'..',ash.program,o.owner||'.'||object_name||'.'||object_type)
order by substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0' , sum(decode(ash.session_state,'ON CPU',1,1)) desc ) A
where A.seq <= 3
-- gc wait event Top sql by object
select A.*
from (
select substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0' HIS_TIME, instance_number inst_id,
row_number () over (partition by substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0' order by sum(decode(ash.session_state,'ON CPU',1,1)) desc ) as SEQ,
decode(ash.sql_id,null, program, ash.sql_id) sql_id,ash.SQL_PLAN_HASH_VALUE Plan_hash,
ash.sql_opname type,
sum(decode(ash.session_state,'ON CPU',1,0)) "CPU",
sum(decode(ash.session_state,'WAITING',1,0)) -
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "WAIT" ,
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) "IO" ,
sum(decode(ash.session_state,'ON CPU',1,1)) "TOTAL"
from dba_hist_active_sess_history ash , dba_objects o
where sample_time between to_date('04/18 02:00', 'MM/DD HH24:MI') and to_date('04/18 05:30', 'MM/DD HH24:MI')
and ash.current_obj#=o.object_id(+)
and o.owner||'.'||object_name||'.'||object_type='MFGDEV.FUT_PL_MESSAGE.TABLE'
group by instance_number, substr(to_char(sample_time, 'YYYY-MM-DD HH24:MI'),1,15)||'0', decode(ash.sql_id,null, program, ash.sql_id) ,ash.SQL_PLAN_HASH_VALUE ,ash.sql_opname ) A
where A.seq <=3
order by inst_id, HIS_TIME
-- Event Top Session
select MIN(to_char(ash.sample_time, 'MM-DD_HH24:MI:SS')) sess_start_time,
MAX(to_char(ash.sample_time, 'MM-DD_HH24:MI:SS')) sess_end_time,
((CAST(MAX(ash.sample_time) AS DATE)) - (CAST(MIN(ash.sample_time) AS DATE))) * (3600 * 24) active_secs,
ash.SESSION_ID||','||ash.SESSION_SERIAL#||'@'||ash.instance_number ash_sess_info,u.username username ,
ash.sql_id SQL_ID, ash.SQL_OPNAME sql_type, o.owner||'.'||o.object_name||'.'||o.object_type curobj, ash.current_file# curfile, ash.current_block# curblock,
ash.blocking_SESSION||','||ash.blocking_SESSION_SERIAL#||'@'||ash.blocking_inst_id blocking_sess_info ,
sum(decode(ash.session_state,'ON CPU',1,0)) CPU_TIME,
sum(decode(ash.session_state,'WAITING',1,0)) -
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) WAIT_TIME ,
sum(decode(ash.session_state,'WAITING', decode(wait_class, 'User I/O',1,0),0)) IO_TIME ,
sum(decode(ash.session_state,'ON CPU',1,1)) DB_TIME --- select *
from dba_hist_active_sess_history ash ,dba_users u , dba_objects o
where ash.sample_time between to_date('04/17 20:00', 'MM/DD HH24:MI') and to_date('04/18 05:40', 'MM/DD HH24:MI')
-- and instance_number=4
and event like 'gc remaster%'
and u.user_id=ash.user_id
and ash.current_obj#=o.object_id
group by ash.SESSION_ID||','||ash.SESSION_SERIAL#||'@'||ash.instance_number ,
ash.blocking_SESSION||','||ash.blocking_SESSION_SERIAL#||'@'||ash.blocking_inst_id,
ash.sql_id, ash.SQL_OPNAME ,u.username ,o.owner||'.'||o.object_name||'.'||o.object_type , ash.current_file#, ash.current_block#
-- Top blocked
select t.lv,
t.iscycle,
t.dbid,
t.sample_id,
to_char(t.sample_time,'YYYY-DD-MM HH24:MI:SS') ash_time,
t.instance_number,
t.session_id,
t.sql_id,
t.session_type,
t.event,
t.seq#,
t.session_state,
t.blocking_inst_id,
t.blocking_session,
t.blocking_session_status,
t.c blocking_session_count
from (select t.*,
row_number() over(partition by dbid, instance_number, sample_time order by c desc) r
from (select t.*,
count(*) over(partition by dbid, instance_number, sample_time, session_id) c,
row_number() over(partition by dbid, instance_number, sample_time, session_id order by 1) r1
from (select /*+ parallel 8 */
level lv,
connect_by_isleaf isleaf,
connect_by_iscycle iscycle,
t.*
from dba_hist_active_sess_history t
where t.sample_time between to_date('04/17 08:00', 'MM/DD HH24:MI') and to_date('04/18 05:40', 'MM/DD HH24:MI')
-- and t.p1=1618 and t.p2=488394
-- and t.instance_number =4
start with blocking_session is not null
connect by nocycle
prior dbid = dbid
and prior sample_time = sample_time
and ((prior sample_time) - sample_time between interval '-1' second and interval '1' second)
and prior blocking_inst_id = instance_number
and prior blocking_session = session_id
and prior blocking_session_serial# = session_serial#) t
where t.isleaf = 1) t
where r1 = 1) t
where r < 3
order by dbid, sample_time, r;
```