Tuesday, November 19, 2013

Oracle Wait Events !!!!!


                           Oracle Wait Events !!!!!





######################## v$session:

select username, SQL_ID, SID, event , status from v$session where EVENT='cr request retry'
;
select event, count(*) from v$session group by event order by 2 ;
select sql_id, count(*) from v$session where EVENT='cr request retry' group by sql_id ;


select sum (wait_time+ SECONDS_IN_WAIT) , event from v$session  group by event order by 1 ;
select sum (SECONDS_IN_WAIT) , event from v$session  group by event order by 1 ;
select sum (wait_time) , event from v$session  group by event order by 1 ;

select p1,p2, event , sum(wait_time)  from v$session
group by p1,p2,event
order by sum(wait_time);

SELECT a.sid, c.pid, c.spid, a.username, b.event, b.wait_time, b.seconds_in_wait, b.p1, b.p2, b.p3
FROM v$session a, v$session_wait b, v$process c
WHERE a.sid = b.sid
AND a.paddr = c.addr
AND b.event LIKE 'enq: RO%';


######################## v$session_wait

SELECT         p1 "file#", p2 "block#", p3 "class#" FROM v$session_wait WHERE event = 'read by
other session';

with temp as (select sid,event,WAIT_TIME+SECONDS_IN_WAIT "TIME_WAITED" from v$session_wait order by 3 desc) select * from temp where rownum < 50;

column sid format 990
column seq# format 99990
column wait_time heading 'WTime' format 99990
column event format a30
column p1 format 9999999990
column p2 format 9999999990
column p3 format 9990
select sid,event,seq#,p1,p2,p3,wait_time
from V$session_wait
order by sid
/


######################## v$session_wait_history

--> gives last ten waits for all active sessions

select seq# , event , wait_time , p1,p2,p3
from v$session_wait_history where sid=988
order by seq# ;


###################### v$session_event

select event,count(*) from v$session_event where event='cr request retry' group by event ;
select event, sum( time_waited) from v$session_event group by event ;
select event, total_waits from v$session_event where event = 'enq: TM - contention';;


select event,sum(TOTAL_WAITS) "TOTAL_WAITS" , sum(TOTAL_TIMEOUTS) "TOTAL_TIMEOUTS" ,sum(TIME_WAITED) "TIME_WAITED",avg (AVERAGE_WAIT) "AVERAGE_WAIT" from v$session_event where event is not null and wait_class <>'Idle' group by event order by 4;


###################### v$system_event
with temp as (select EVENT,TOTAL_WAITS,TOTAL_TIMEOUTS,TIME_WAITED,AVERAGE_WAIT from v$system_event where wait_class <> 'Idle' order by 4 desc ) select * from temp where rownum < 50;

select event, total_waits from v$system_event where event = 'enq: TM - contention';;
select event,count(*) from v$system_event where event='cr request retry' group by event ;
select event, sum( time_waited) from v$system_event group by event ;

/* session_events.sql */
column SID            format 9999
column TOTAL_WAITS    format 999999 heading TOT|WAIT
column AVERAGE_WAIT   format 99999  heading AVG|WAIT
column EVENT          format a30
select
   SID,
   EVENT,
   TOTAL_WAITS,
   TIME_WAITED,
   AVERAGE_WAIT,
   MAX_WAIT
from
   V$SESSION_EVENT
where
   SID in ("&sid_list") -- sid list generated from above query
order by
   TOTAL_WAITS;


##################### V$statname

select a.name,sum(b.value)
from V$statname a, v$sesstat b
where a.statistic#=b.statistic#
group by a.name
order by 2;

select a.name,sum(b.value)
from V$statname a, v$sysstat b
where a.statistic#=b.statistic#
group by a.name
order by 2;




############################# v$enqueue_statistics

select eq_name, eq_type, req_reason  from v$enqueue_statistics  3  where eq_type = 'TM';

with temp as (select EQ_NAME,TOTAL_REQ#,TOTAL_WAIT#,SUCC_REQ#,FAILED_REQ# from v$enqueue_statistics order by 3 desc ) select * from temp where rownum <50;


########################### v$event_histogram


Select * from v$event_histogram
select * from  gV$EVENT_HISTOGRAM  ;

####################### v$active_session_history

SELECT sample_time, event, wait_time
FROM gv$active_session_history
WHERE session_id = 147
AND session_serial# = 1715;

select
       o.object_name obj,
       o.object_type otype,
       ash.SQL_ID,
       w.class
from v$active_session_history ash,
     ( select rownum class#, class from v$waitstat ) w,
      all_objects o
where event='buffer busy waits'
   and w.class#(+)=ash.p3
   and o.object_id (+)= ash.CURRENT_OBJ#
Order by sample_time;

select event, count(*) from v$active_session_history  group by event ;

with temp as (select session_id,event,(time_waited+wait_time) "TOTAL_TIME_WAITED" from v$active_session_history where event is not null order by time_waited+wait_time desc)
select * from temp where rownum <50;


select event ,sum(wait_time+time_waited) from v$active_session_history
##where snap_id=8987
and event='cr request retry'
group by event
order by 2 ;

select sum (wait_time+time_waited) , event from v$active_session_history   group by event
order by 1 ;
select sum (wait_time) , event from v$active_session_history   group by event order by 1 ;

select sum (time_waited) , event from v$active_session_history  
where sample_time between sysdate - 15/1440 and sysdate ;
group by event order by 1 ;



############################## dba_hist_active_sess_history

select sql_id ,sum(wait_time+time_waited) from dba_hist_active_sess_history where
snap_id=8987
and event='cr request retry' group by sql_id order by 2 ;

select event ,sum(wait_time+time_waited) from dba_hist_active_sess_history
##where snap_id=8987
and event='cr request retry'
group by event
order by 2 ;


with temp as (select session_id,event,(time_waited+wait_time) "TOTAL_TIME_WAITED" from
dba_hist_active_sess_history where event is not null order by time_waited+wait_time desc)
select * from temp where rownum <50;


####################### session wait on object


SELECT
  A.CURRENT_OBJ#,
  d.OBJECT_NAME,
  d.OBJECT_TYPE,
  A.EVENT,
  SUM(A.WAIT_TIME + A.TIME_WAITED) TOTAL_WAIT_TIME
FROM
  V$ACTIVE_SESSION_HISTORY A,
  DBA_OBJECTS D
#WHERE   A.SAMPLE_TIME BETWEEN SYSDATE – 30/2880 AND SYSDATE
 where A.CURRENT_OBJ# = D.OBJECT_ID
GROUP BY
  A.CURRENT_OBJ#,
  D.OBJECT_NAME,
  D.OBJECT_TYPE,
  A.EVENT
ORDER BY
  TOTAL_WAIT_TIME;


select * from (
SELECT
  A.inst_id,
  A.CURRENT_OBJ#,
  D.OBJECT_NAME,
  D.OBJECT_TYPE,
  d.owner,
  A.EVENT,
  a.sql_id,
  SUM(A.WAIT_TIME + A.TIME_WAITED) TOTAL_WAIT_TIME
FROM
  gV$ACTIVE_SESSION_HISTORY A,
  DBA_OBJECTS D
WHERE
  A.CURRENT_OBJ# = D.OBJECT_ID
GROUP BY
  A.inst_id,
  A.CURRENT_OBJ#,
  D.OBJECT_NAME,
  D.OBJECT_TYPE,
  A.EVENT,
 d.owner,
 a.sql_id
ORDER BY
  TOTAL_WAIT_TIME
)
where rownum<=20
/



col object_name for a25
col statistic_name for a35
col owner for a15
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='db block changes' order by 4
desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='segment scans' order by 4
desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='row lock waits' order by 4
desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='buffer busy waits' order by 4
desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='physical reads direct' order
by 4 desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='physical reads' order by 4
desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='physical writes' order by 4
desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='physical writes direct' order
by 4 desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='logical reads' order by 4
desc) select * from temp where rownum < 30;
with temp as (select a.owner,a.object_name,b.statistic_name,b.value from v$segstat b,
dba_objects a where a.object_id=b.obj# and b.statistic_name='ITL waits' order by 4 desc)
select * from temp where rownum < 30;


SELECT object_name, value
FROM V$SEGMENT_STATISTICS
WHERE statistic_name = 'buffer busy waits' AND
value > 20000;

SELECT a.current_obj#, o.object_name, o.object_type, a.event,
SUM(a.wait_time +
a.time_waited) total_wait_time
FROM v$active_session_history a,
dba_objects o
WHERE a.sample_time between sysdate – 30/2880 and sysdate
AND a.current_obj# = o.object_id
GROUP BY a.current_obj#, o.object_name, o.object_type, a.event
ORDER BY total_wait_time;


select p1text, p1, p2text, p2, p3text, p3, a.event
from v$active_session_history a
WHERE a.sample_time between sysdate – 30/2880 and sysdate
AND a.current_obj# = 1938000


####################### session wait on file

while (true)
do
sqlplus -s "/ as sysdba" <<EOF | tee -a pteh.out
set lines 200
set heading off;
set feedback off;
set echo off;
set pages 1000
column event format a30
column file_name format a55
select '=============================================' || to_char(sysdate,'DD-MON-YY
HH24:MI:SS') from dual;
select a.sid, a.event, b.tablespace_name,b.file_name,a.p1, a.p2, a.p3, a.p1raw from
v\$session_wait a, dba_data_files b
where a.p1=b.file_id and  a.sid in (select sid from v\$session where username='TEH')order
by 2;
EOF
sleep 15
done

SELECT * FROM DBA_EXTENTS WHERE FILE_ID=&FILEID AND &BLOCKID BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS



column buffer_busy_wait format 999,999,999

select sn.snap_id,
to_char(sn.end_interval_time,'dd Mon HH24:mi:ss') mydate,
avg(new.buffer_busy_wait-old.buffer_busy_wait) buffer_busy_wait
from
dba_hist_buffer_pool_stat old,
dba_hist_buffer_pool_stat new,
dba_hist_snapshot sn
where new.snap_id = sn.snap_id
and new.snap_id = sn.snap_id
and old.snap_id = sn.snap_id-1
having avg(new.buffer_busy_wait-old.buffer_busy_wait) > 100
group by to_char(sn.end_interval_time,'dd Mon HH24:mi:ss'), sn.snap_id;



select
obj.object_type,
obj.object_name,
to_char(sn.end_interval_time,'dd Mon HH24:mi:ss') mydate,
avg(new.buffer_busy_wait-old.buffer_busy_wait) buffer_busy_wait
from
dba_hist_buffer_pool_stat old,
dba_hist_buffer_pool_stat new,
dba_hist_snapshot sn,
dba_hist_active_sess_history ash,
dba_data_files df,
dba_objects obj
where new.snap_id = sn.snap_id
and new.snap_id = sn.snap_id
and old.snap_id = sn.snap_id-1
and df.file_id = ash.current_file#
and obj.object_id = ash.current_obj#
and ash.snap_id = sn.snap_id
and sn.snap_id = 15882
having avg(new.buffer_busy_wait-old.buffer_busy_wait) > 100
group by to_char(sn.end_interval_time,'dd Mon HH24:mi:ss'), obj.object_type,


select BUFFER_BUSY_WAITS_TOTAL,
BUFFER_BUSY_WAITS_DELTA,
obj.object_type,
obj.object_name,
to_char(sn.end_interval_time,'dd Mon HH24:mi:ss') mydate,
avg(new.buffer_busy_wait-old.buffer_busy_wait) buffer_busy_wait
from
dba_hist_buffer_pool_stat old,
dba_hist_buffer_pool_stat new,
dba_hist_snapshot sn,
dba_hist_active_sess_history ash,
dba_data_files df,
dba_objects obj,
DBA_HIST_SEG_STAT dss
where new.snap_id = sn.snap_id
and new.snap_id = sn.snap_id
and old.snap_id = sn.snap_id-1
and df.file_id = ash.current_file#
and obj.object_id = ash.current_obj#
and dss.snap_id = sn.snap_id
and dss.OBJ# = obj.object_id
and ash.snap_id = sn.snap_id
and sn.snap_id = 15882
having avg(new.buffer_busy_wait-old.buffer_busy_wait) > 100
group by
to_char(sn.end_interval_time,'dd Mon HH24:mi:ss'), obj.object_type, obj.object_name, BUFFER_BUSY_WAITS_TOTAL, BUFFER_BUSY_WAITS_DELTA;




######### node performance comparision ######


WITH sysstats AS (
SELECT inst_id,
 SUM(CASE WHEN name LIKE 'gc%received'
THEN VALUE END) gc_blocks_recieved,
 SUM(CASE WHEN name = 'session logical reads'
 THEN VALUE END) logical_reads,
SUM(CASE WHEN name = 'physical reads'
THEN VALUE END) physical_reads
 FROM gv$sysstat
 GROUP BY inst_id)
SELECT instance_name, logical_reads, gc_blocks_recieved, physical_reads,
ROUND(physical_reads*100/logical_reads,2) phys_to_logical_pct,
 ROUND(gc_blocks_recieved*100/logical_reads,2) gc_to_logical_pct
 FROM sysstats JOIN gv$instance
USING (inst_id);



#########  rac top wait event ######


 WITH sys_time AS (
SELECT inst_id, SUM(CASE stat_name WHEN 'DB time'
THEN VALUE END) db_time,
SUM(CASE WHEN stat_name IN ('DB CPU', 'background cpu time')
THEN VALUE END) cpu_time
FROM gv$sys_time_model
GROUP BY inst_id )
SELECT instance_name,
ROUND(db_time/1000000,2) db_time_secs,
 ROUND(db_time*100/SUM(db_time) over(),2) db_time_pct,
 ROUND(cpu_time/1000000,2) cpu_time_secs,
 ROUND(cpu_time*100/SUM(cpu_time) over(),2) cpu_time_pct
 FROM sys_time
 JOIN gv$instance USING (inst_id);


No comments:

Post a Comment