Number of Sessions Waiting On A Particular Wait Event
SELECT count(*), event FROM v$session_wait WHERE wait_time = 0 AND event NOT IN ('smon timer','pipe get','wakeup time manager', 'pmon timer','rdbms ipc message', 'SQL*Net message from client') GROUP BY event ORDER BY 1 DESC;
What Wait Events Are Sessions Waiting On
set linesize 120 col username format a10 col event format a30 select sid, serial#,username, event, seconds_in_wait, wait_time from v$session where state = 'WAITING' and wait_class != 'Idle' order by event;
Top SQL (Buffer Gets)
This script will list the top 5 SQL statements sorted by the most number of buffer gets or logical reads
set serverout on size 1000000 declare top5 number; text1 varchar2(4000); x number; len1 number; Cursor c1 is select buffer_gets,substr(sql_text,1,4000) from v$sqlarea order by buffer_gets desc; begin dbms_output.put_line('Reads'||' '||' Text'); dbms_output.put_line ('-----'||' '||'---------------------------------------------------'); dbms_output.put_line(' '); open c1; for i in 1 .. 5 loop fetch c1 into top5, text1; dbms_output.put_line(rpad(to_char(top5),9)|| ' '||substr(text1,1,66)); len1 :=length(text1); x := 66; while len1 > x-1 loop dbms_output.put_line('" '||substr(text1,x,64)); x := x+64; end loop; end loop; end;/
Script – Top SQL (Physical Reads)
This script will list the top 5 SQL statements sorted by the most number of physical reads
set serverout on size 1000000 set feedback off declare top5 number; text1 varchar2(4000); x number; len1 number; Cursor c1 is select disk_reads,substr(sql_text,1,4000) from v$sqlarea order by disk_reads desc; begin dbms_output.put_line('Reads'||' '||' Text'); dbms_output.put_line ('-----'||' '||'----------------------------------------------------'); dbms_output.put_line(' '); open c1; for i in 1 .. 5 loop fetch c1 into top5, text1; dbms_output.put_line(rpad(to_char(top5),9)|| ' '||substr(text1,1,66)); len1 :=length(text1); x := 66; while len1 > x-1 loop dbms_output.put_line('" '||substr(text1,x,64)); x := x+64; end loop; end loop; end; /
Sessions with high physical reads
set linesize 120 col os_user format a10 col username format a15 col pid format 9999999999 PROMPT SESSIONS SORTED BY PHYSICAL READS PROMPT select OSUSER os_user,username, PROCESS pid, ses.SID sid, SERIAL#, PHYSICAL_READS, BLOCK_CHANGES from v$session ses, v$sess_io sio where ses.SID = sio.SID and username is not null and status='ACTIVE' order by PHYSICAL_READS;
Monitor sessions with high Physical Reads
set linesize 120 col osuser format a10 col username format 10 select OSUSER osuser, username, PROCESS pid, ses.SID sid, SERIAL#, PHYSICAL_READS, BLOCK_CHANGES from v$session ses, v$sess_io sio where ses.SID = sio.SID order by PHYSICAL_READS;
Monitor long running operations using v$session_longops
SELECT SID, SERIAL#, opname, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) COMPLETE FROM V$SESSION_LONGOPS WHERE TOTALWORK != 0 AND SOFAR != TOTALWORK order by 1; Note: the same query can be used to monitor RMAN backup status SELECT SID, SERIAL#, CONTEXT, SOFAR, TOTALWORK, ROUND(SOFAR/TOTALWORK*100,2) "%_COMPLETE" FROM V$SESSION_LONGOPS WHERE OPNAME LIKE 'RMAN%' AND OPNAME NOT LIKE '%aggregate%' AND TOTALWORK != 0 AND SOFAR != TOTALWORK;
Locked Sessions and Locked Objects
PROMPT Blocked and Blocker Sessions col blocker_sid format 99999999999 col blocked_sid format 99999999999 col min_blocked format 99999999999 col request format 9999999 select /*+ ORDERED */ blocker.sid blocker_sid , blocked.sid blocked_sid , TRUNC(blocked.ctime/60) min_blocked , blocked.request from (select * from v$lock where block != 0 and type = 'TX') blocker , v$lock blocked where blocked.type='TXd blocked.block = 0 and blocked.id1 = blocker.id1;
prompt blocked objects from V$LOCK and SYS.OBJ$
set lines 132 col BLOCKED_OBJ format a35 trunc select /*+ ORDERED */ l.sid , l.lmode , TRUNC(l.ctime/60) min_blocked , u.name||'.'||o.NAME blocked_obj from (select * from v$lock where type='TM' and sid in (select sid from v$lock where block!=0)) l , sys.obj$ o , sys.user$ u where o.obj# = l.ID1 and o.OWNER# = u.user# /
prompt blocked sessions from V$LOCK
select /*+ ORDERED */ blocker.sid blocker_sid , blocked.sid blocked_sid , TRUNC(blocked.ctime/60) min_blocked , blocked.request from (select * from v$lock where block != 0 and type = 'TX') blocker , v$lock blocked where blocked.type='TXd blocked.block = 0 and blocked.id1 = blocker.id1 /
prompt blokers session details from V$SESSION
set lines 132 col username format a10 trunc col osuser format a12 trunc col machine format a15 trunc col process format a15 trunc col action format a50 trunc SELECT sid , serial# , username , osuser , machine FROM v$session WHERE sid IN (select sid from v$lock where block != 0 and type = 'TX') /
No comments:
Post a Comment