Power Scripts Code Depot
Power Scripts Code Depot
-- ******************************************************
CPU_TIME.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* CPU_TIME.SQL Mike Ault heading 'Statistic' heading 'Value'
ttitle 'CPU Related Statistics' spool cpu_stats select name,value from v$sysstat where upper(name) like '%CPU%' ; spool off clear columns ttitle off
----------
CPU.SQL ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* CPU.SQL Mike Ault SQL by CPU Usage (v$sqlarea) sql_text format a40 word_wrapped heading 'SQL Text' cpu_time heading 'CPU Time'
column elapsed_time heading 'Elapsed Time' column disk_reads heading 'Disk Reads' column buffer_gets heading 'Buffer Gets' column rows_processed heading 'Rows Processed' set pages 55 lines 132 ttitle 'SQL By CPU Usage' spool cpu select * from (select sql_text, cpu_time/1000000000 cpu_time, elapsed_time/1000000000 elapsed_time, disk_reads, buffer_gets, rows_processed from v$sqlarea order by cpu_time desc, disk_reads desc ) where rownum < 21 / spool off set pages 22 lines 80 ttitle off
----------
ENQUEUES9i.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem rem ENQUEUES9i.SQL rem Mike Ault rem ttitle 'Enqueues Report' spool enqueues prompt Enqueues col name format a25 col lock format a4 heading 'Lock' col gets format 9,999,999 heading 'Gets' col waits format 9,999,999 heading 'Waits' col Mode format a4 SELECT * FROM v$sysstat WHERE class=4 ; SELECT chr(bitand(p1,-16777216)/16777215) chr(bitand(p1, 16711680)/65535) "Lock", to_char( bitand(p1, 65535) ) "Mode" FROM v$session_wait WHERE event = 'enqueue' /
Prompt Enqueue Stats select * from v$enqueue_stat where cum_wait_time>0 order by cum_wait_time desc / spool off ttitle off
----------
events.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* sid event total_waits total_timeouts time_waited average_wait username HEADING HEADING HEADING HEADING HEADING HEADING HEADING Sid Event Total Waits Total Timeouts Time Waited Average Wait User FORMAT a40
BREAK ON username ttitle "Session Events By User" SPOOL events SET LINES 132 PAGES 59 VERIFY OFF FEEDBACK OFF SELECT username, event, total_waits,total_timeouts, time_waited,average_wait FROM sys.v_$session_event a, sys.v_$session b WHERE a.sid= b.sid ORDER BY 1; SPOOL OFF PAUSE Press Enter to continue CLEAR COLUMNS CLEAR BREAKS SET LINES 80 PAGES 22 VERIFY ON FEEDBACK ON TTITLE OFF
------rem rem rem rem rem rem rem rem col col col col col col col col col
This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* SYS_EVENTS_PCT.SQL Mike Ault This report shows the major events in the database and their contribution to overall response time. event format a30 heading waits format 999,999,999 heading average_wait format 999,999,999 heading time_waited format 999,999,999 heading total_time new_value divide_by noprint value new_value val noprint percent format 999.990 heading duration new_value millisec noprint p_of_total heading 'Percent of Total 'Event Name' 'Total Waits' 'Average Waits' 'Time Waited' 'Percent Of Non-Idle Waits' Uptime' format 999.9999
set lines 132 feedback off verify off pages 50 select to_number(sysdate-startup_time)*86400*1000 duration from v$instance ; select sum(time_waited) total_time from v$system_event where total_waits-total_timeouts>0 and event not like 'SQL*Net%' and event not like 'smon%' and event not like 'pmon%' and event not like 'rdbms%' and event not like 'PX%' and event not like 'sbt%' and event not in ('gcs remote message','ges remote message', 'virtual circuit status','dispatcher timer') ; select value from v$sysstat where name ='CPU used when call started' ; ttitle 'System Events Percent' break on report compute sum of time_waited on report spool sys_events select name event, 0 waits, 0 average_wait, value time_waited, value/(&÷_by+&&val)*100 Percent, value/&&millisec*100 p_of_total from v$sysstat where name ='CPU used when call started'
union select event, total_waits-total_timeouts waits, time_waited/(total_waits-total_timeouts) average_wait, time_waited, time_waited/(&÷_by+&&val)*100 Percent, time_waited/&&millisec*100 P_of_total from v$system_event where total_waits-total_timeouts > 0 and event not like 'SQL*Net%' and event not like 'smon%' and event not like 'pmon%' and event not like 'rdbms%' and event not like 'PX%' and event not like 'sbt%' and event not in ('gcs remote message','ges remote message', 'virtual circuit status','dispatcher timer') and time_waited > 0 order by percent desc ; spool off clear columns ttitle off clear computes clear breaks
----------
SYS_EVENTS.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem rem SYS_EVENTS.SQL rem Mike Ault rem set pagesize 100 col event format a30 heading col waits format 999,999,999 heading col average_wait format 999,999,999 heading col time_waited format 999,999,999 heading ttitle 'System Events' break on report compute sum of time_waited on report spool sys_events
select event, total_waits-total_timeouts waits, time_waited/(total_waits-total_timeouts) average_wait, time_waited from v$system_event where total_waits-total_timeouts>0
event not like 'SQL*Net%' event not like 'smon%' event not like 'pmon%' event not like 'rdbms%' event not like '%control%' event not like 'LGWR%' and event not like 'PX%' order by time_waited desc / spool off clear columns ttitle off
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* SEE_4031.SQL Mike Ault kghlurcr kghlutrn kghlufsh kghluops kghlunfu kghlunfs heading heading heading heading heading heading "RECURRENT CHUNKS" "TRANSIENT CHUNKS" "FLUSHED CHUNKS" "PINS AND RELEASES" "ORA-4031 ERRORS" "LAST ERROR SIZE"
ttitle 'Report on 4031 events (SYS user only)' spool cpu_stats select kghlurcr, kghlutrn, kghlufsh, kghluops, kghlunfu, kghlunfs from sys.x$kghlu where inst_id = userenv('Instance') ; spool off clear columns ttitle off
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem rem Mike Ault rem rem snap_delta_sys_events_pct90.sql rem rem Function: Calculates the delta values between statspacks for events rem then shows what they contribute to the overall wait picture rem rem total response time=wait time+cpu time (divide_by+val) rem ttitle off col event format a30 heading 'Event Name' col waits format 999,999,999 heading 'Total Waits' col average_wait format 999,999,999 heading 'Average Waits' col time_waited format 999,999,999 heading 'Time Waited' col percent format 999.990 heading 'Percent Of Non-Idle Waits' col p_of_total format 999.9999 heading 'Percent of Total Uptime' rem rem col total_time new_value divide_by noprint col value new_value val noprint col duration new_value sec noprint rem set lines 132 feedback off verify off pages 50 rem rem Number of seconds since startup (duration->sec) rem 86400 is number of seconds in a day, total available time is elapsed*number of cpus rem select to_number(sysdate-a.startup_time)*86400*to_number(b.value) duration from v$instance a, v$parameter b where b.name='cpu_count'; rem rem Total seconds of waiting (total_time->divide_by) rem in 9.0 this was in microseconds, so we divide by 1000000 to get to rem seconds rem select sum(b.time_waited_micro-a.time_waited_micro)/1000000 total_time from stats$system_event a, stats$system_event b where (b.total_waits-b.total_timeouts)-(a.total_waits-a.total_timeouts)>0 and a.event not like 'SQL*Net%' and a.event not like 'smon%' and a.event not like 'pmon%' and a.event not like 'rdbms%' and a.event not like 'PX%' and a.event not like 'sbt%' and a.event not in ('gcs remote message','ges remote message', 'virtual circuit status','dispatcher timer') and a.snap_id=&&first_snap_id
and b.snap_id=&&sec_snap_id and a.event=b.event ; rem rem CPU seconds between snap 1 and snap 2 (value->val) rem as placed in table the view they are milliseconds rem divide by 1000 to correct to seconds rem select b.value-a.value/1000 value from stats$sysstat a, stats$sysstat b where a.name ='CPU used when call started' and b.name ='CPU used when call started' and a.snap_id=&&first_snap_id and b.snap_id=&&sec_snap_id; rem ttitle 'Snap &&first_snap_id to &&sec_snap_id System Events Percent' break on report compute sum of time_waited on report spool snap&&first_snap_id'_to_'&&sec_snap_id'_sys_events' rem rem Now for the report, first we get CPU contribution, then the waits rem select 'CPU used when call started' event, 0 waits, 0 average_wait, &&val time_waited, (&&val/(&÷_by+&&val))*100 Percent, (&&val/1000/(&&sec))*100 p_of_total from dual union select a.event, (b.total_waits-b.total_timeouts)-(a.total_waits-a.total_timeouts) waits, ((b.time_waited_micro-a.time_waited_micro)/1000000)/((b.total_waits-b.tota l_timeouts)-(a.total_waits-a.total_timeouts)) average_wait, (b.time_waited_micro-a.time_waited_micro)/1000000 time_waited, ((b.time_waited_micro-a.time_waited_micro)/1000000/(&÷_by+&&val))*1 00 Percent, (((b.time_waited_micro-a.time_waited_micro)/1000000)/&&sec)*100 P_of_tota l from stats$system_event a, stats$system_event b where (b.total_waits-b.total_timeouts)-(a.total_waits-a.total_timeouts)>0 and a.event not like 'SQL*Net%' and a.event not like 'smon%' and a.event not like 'pmon%' and a.event not like 'rdbms%' and a.event not like 'PX%' and a.event not like 'sbt%' and a.event not in ('gcs remote message','ges remote message', 'virtual circuit status','dispatcher timer') and b.time_waited_micro-a.time_waited_micro>0 and a.snap_id=&&first_snap_id and b.snap_id=&&sec_snap_id and a.event=b.event order by percent desc / spool off clear columns ttitle off clear computes clear breaks undef first_snap_id
undef sec_snap_id
----------
wt_events_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select event , waits "Waits" , time "Wait Time (s)" , pct*100 "Percent of Total" , waitclass "Wait Class" from (select e.event_name event , e.total_waits - nvl(b.total_waits,0) waits , (e.time_waited_micro - nvl(b.time_waited_micro,0))/100000 0 time , (e.time_waited_micro - nvl(b.time_waited_micro,0))/ (select sum(e1.time_waited_micro - nvl(b1.time_waited_mic ro,0)) from dba_hist_system_event b1 , dba_hist_system_event e1 where b1.snap_id(+) = b.snap_id and e1.snap_id = e.snap_id and b1.dbid(+) = b.dbid and e1.dbid = e.dbid and b1.instance_number(+) = b.instance_number and e1.instance_number = e.instance_number and b1.event_id(+) = e1.event_id and e1.total_waits > nvl(b1.total_waits,0) and e1.wait_class <> 'Idle' ) pct , e.wait_class waitclass from dba_hist_system_event b , dba_hist_system_event e where b.snap_id(+) = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid(+) = &pDbId and e.dbid = &pDbId and b.instance_number(+) = &pInstNum and e.instance_number = &pInstNum and b.event_id(+) = e.event_id and e.total_waits > nvl(b.total_waits,0) and e.wait_class <> 'Idle' order by time desc, waits desc )
-------
enq_stat_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk.
-- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select ety Enqueue , reqs "Requests", sreq "Successful Gets", freq "Failed Gets", waits "Waits", wttm "Wait Time (s)", awttm "Average Wait Time(ms)" from ( select /*+ ordered */ e.eq_type '-' to_char(nvl(l.name,' ')) decode( upper(e.req_reason) , 'CONTENTION', null , '-', null , ' (' e.req_reason ')') ety , e.total_req# - nvl(b.total_req#,0) reqs , e.succ_req# - nvl(b.succ_req#,0) sreq , e.failed_req# - nvl(b.failed_req#,0) freq , e.total_wait# - nvl(b.total_wait#,0) waits , (e.cum_wait_time - nvl(b.cum_wait_time,0))/1000 wttm , decode( (e.total_wait# - nvl(b.total_wait#,0)) , 0, to_number(NULL) , ( (e.cum_wait_time - nvl(b.cum_wait_time,0)) / (e.total_wait# - nvl(b.total_wait#,0)) ) ) awttm from dba_hist_enqueue_stat e , dba_hist_enqueue_stat b , v$lock_type l where b.snap_id(+) = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid(+) = &pDbId and e.dbid = &pDbId and b.dbid(+) = e.dbid and b.instance_number(+) = &pInstNum and e.instance_number = &pInstNum and b.instance_number(+) = e.instance_number and b.eq_type(+) = e.eq_type and b.req_reason(+) = e.req_reason and e.total_wait# - nvl(b.total_wait#,0) > 0 and l.type(+) = e.eq_type order by wttm desc, waits desc)
----------
sys_time_model_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
column "Time (s)" format 999,999 column "Percent of Total DB Time" format 999,999 select e.stat_name "Statistic Name" , (e.value - b.value)/1000000 "Time (s)" , decode( e.stat_name,'DB time' , to_number(null) , 100*(e.value - b.value) )/ ( select nvl((e1.value - b1.value),-1) from dba_hist_sys_time_model e1 , dba_hist_sys_time_model b1 where b1.snap_id = b.snap_id and e1.snap_id = e.snap_id and b1.dbid = b.dbid and e1.dbid = e.dbid and b1.instance_number = b.instance_number and e1.instance_number = e.instance_number and b1.stat_name = 'DB time' and b1.stat_id = e1.stat_id ) "Percent of Total DB Time" from dba_hist_sys_time_model e , dba_hist_sys_time_model b where and and and and and and and order b.snap_id e.snap_id b.dbid e.dbid b.instance_number e.instance_number b.stat_id e.value - b.value > 0 by 2 desc; = = = = = = = &pBgnSnap &pEndSnap &pDbId &pDbId &pInst_Num &pInst_Num e.stat_id
----------
ash_enqueues.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* begin_interval_time req_reason cum_wait_time total_req# total_wait# failed_req# format a10 format a25 head CUM WAIT TIME head TOTAL REQ# head TOTAL WAIT# head FAILED REQ#
total_wait#, succ_req#, failed_req#, cum_wait_time from dba_hist_enqueue_stat natural join dba_hist_snapshot where cum_wait_time > 0 order by begin_interval_time, cum_wait_time;
----------
globiostats.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select name, value from sys.v_$sysstat where name in ('consistent changes', 'consistent gets', 'db block changes', 'db block gets', 'physical reads', 'physical writes', 'sorts (disk)', 'user commits', 'user rollbacks' ) order by 1;
----------
buffratio.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select 100 -
100 * (round ((sum (decode (name, 'physical reads', value, 0)) sum (decode (name, 'physical reads direct', value, 0)) sum (decode (name, 'physical reads direct (lob)', value, 0))) / (sum (decode (name, 'session logical reads', value, 1)) ),3)) hit_ratio from sys.v_$sysstat where name in ('session logical reads', 'physical reads direct (lob)', 'physical reads', 'physical reads direct');
----------
syswaits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select event, total_waits, round(100 * (total_waits / sum_waits),2) pct_waits, time_wait_sec, round(100 * (time_wait_sec / greatest(sum_time_waited,1)),2) pct_time_waited, total_timeouts, round(100 * (total_timeouts / greatest(sum_timeouts,1)),2) pct_timeouts, average_wait_sec from (select event, total_waits, round((time_waited / 100),2) time_wait_sec, total_timeouts, round((average_wait / 100),2) average_wait_sec from sys.v_$system_event where event not in ('lock element cleanup', 'pmon timer', 'rdbms ipc message', 'rdbms ipc reply', 'smon timer',
'SQL*Net message from client', 'SQL*Net break/reset to client', 'SQL*Net message to client', 'SQL*Net more data from client', 'dispatcher timer', 'Null event', 'parallel query dequeue wait', 'parallel query idle wait - Slaves', 'pipe get', 'PL/SQL lock timer', 'slave wait', 'virtual circuit status', 'WMON goes to sleep') and event not like 'DFS%' and event not like 'KXFX%'), (select sum(total_waits) sum_waits, sum(total_timeouts) sum_timeouts, sum(round((time_waited / 100),2)) sum_time_waited from sys.v_$system_event where event not in ('lock element cleanup', 'pmon timer', 'rdbms ipc message', 'rdbms ipc reply', 'smon timer', 'SQL*Net message from client', 'SQL*Net break/reset to client', 'SQL*Net message to client', 'SQL*Net more data from client', 'dispatcher timer', 'Null event', 'parallel query dequeue wait', 'parallel query idle wait - Slaves', 'pipe get', 'PL/SQL lock timer', 'slave wait', 'virtual circuit status', 'WMON goes to sleep') and event not like 'DFS%' and event not like 'KXFX%') order by 2 desc, 1 asc;
---------rem
fileio.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem NAME: fileio.sql rem rem FUNCTION: Reports on the file io status of all of the rem datafiles in the database. rem rem Mike Ault rem column sum_io1 new_value st1 noprint column sum_io2 new_value st2 noprint column sum_io new_value divide_by noprint column Percent format 999.999 heading 'Percent Of IO' column brratio format 999.99 heading 'Block Read Ratio' column bwratio format 999.99 heading 'Block Write Ratio' column phyrds heading 'Physical Reads' column phywrts heading 'Physical Writes' column phyblkrd heading 'Physical Block Reads' column phyblkwrt heading 'Physical Block Writes' column name format a30 heading 'File Name' column file# format 9999 heading 'File' column dt new_value today noprint TTITLE 'FILE I/O Status' select to_char(sysdate,'ddmonyyyyhh24miss') dt from dual; set feedback off verify off lines 132 pages 60 sqlbl on trims on rem select nvl(sum(a.phyrds+a.phywrts),0) sum_io1 from sys.v_$filestat a; select nvl(sum(b.phyrds+b.phywrts),0) sum_io2 from sys.v_$tempstat b; select &st1+&st2 sum_io from dual; rem title 'File IO Statistics Report' spool fileio&&today select a.file#,b.name, a.phyrds, a.phywrts, (100*(a.phyrds+a.phywrts)/÷_by) Percent, a.phyblkrd, a.phyblkwrt, (a.phyblkrd/greatest(a.phyrds,1)) brratio, (a.phyblkwrt/greatest(a.phywrts,1)) bwratio from sys.v_$filestat a, sys.v_$dbfile b where a.file#=b.file# union select c.file#,d.name, c.phyrds, c.phywrts, (100*(c.phyrds+c.phywrts)/÷_by) Percent, c.phyblkrd, c.phyblkwrt,(c.phyblkrd/greatest(c.phyrds,1)) brratio, (c.phyblkwrt/greatest(c.phywrts,1)) bwratio from sys.v_$tempstat c, sys.v_$tempfile d where c.file#=d.file# order by 1 / spool off set feedback on verify on lines 80 pages 22
clear columns ttitle off ---------io_sec.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem rem NAME: io_sec.sql rem rem FUNCTION: PL/SQL to calculate IO/sec data rem Mike Ault rem set serveroutput on declare cursor get_io is select nvl(sum(a.phyrds+a.phywrts),0) sum_io1,to_number(null) sum_io2 from sys.gv_$filestat a union select to_number(null) sum_io1, nvl(sum(b.phyrds+b.phywrts),0) sum_io2 from sys.gv_$tempstat b; now date; elapsed_seconds number; sum_io1 number; sum_io2 number; sum_io12 number; sum_io22 number; tot_io number; tot_io_per_sec number; fixed_io_per_sec number; temp_io_per_sec number; begin open get_io; for i in 1..2 loop fetch get_io into sum_io1, sum_io2; if i = 1 then sum_io12:=sum_io1; else sum_io22:=sum_io2; end if; end loop; select sum_io12+sum_io22 into tot_io from dual; select sysdate into now from dual; select ceil((now-max(startup_time))*(60*60*24)) into elapsed_seconds from gv$ins tance; fixed_io_per_sec:=sum_io12/elapsed_seconds; temp_io_per_sec:=sum_io22/elapsed_seconds; tot_io_per_sec:=tot_io/elapsed_seconds; dbms_output.put_line('Elapsed Sec :' to_char(elapsed_seconds, '9,999,999.99')); dbms_output.put_line('Fixed IO/SEC:' to_char(fixed_io_per_sec,'9,999,999.99')); dbms_output.put_line('Temp IO/SEC :' to_char(temp_io_per_sec, '9,999,999.99'));
----------
IO_TIMING.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem IO_TIMING.SQL rem rem Purpose: Calculate IO timing values for datafiles rem rem MIKE AULT rem col name format a30 set lines 132 pages 45 ttitle 'IO Timing Analysis' spool io_time select f.FILE# ,d.name,PHYRDS,PHYWRTS,READTIM/PHYRDS,WRITETIM/PHYWRTS from v$filestat f, v$datafile d where f.file#=d.file# order by readtim/phyrds desc / spool off ttitle off clear col
----------
Snapfileio.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem rem NAME: snapfileio.sql rem rem FUNCTION: Reports on the file io status of all of the rem datafiles in the database. rem Mike Ault rem column sum_io1 new_value st1 noprint column sum_io2 new_value st2 noprint column sum_io new_value divide_by noprint column Percent format 999.999 heading 'Percent Of IO' column brratio format 999.99 heading 'Block Read Ratio' column bwratio format 999.99 heading 'Block Write Ratio'
column phyrds heading 'Physical Reads' column phywrts heading 'Physical Writes' column phyblkrd heading 'Physical Block Reads' column phyblkwrt heading 'Physical Block Writes' column filename format a45 heading 'File Name' column file# format 9999 heading 'File' set feedback off verify off lines 132 pages 60 sqlbl on trims on rem select nvl(sum(a.phyrds+a.phywrts),0) sum_io1 from stats$filestatxs a where snap_id=&&snap; select nvl(sum(b.phyrds+b.phywrts),0) sum_io2 from stats$tempstatxs b where snap_id=&&snap; select &st1+&st2 sum_io from dual; rem ttitle132 'Snap&&snap File IO Statistics Report' spool fileio&&snap select a.filename, a.phyrds, a.phywrts, (100*(a.phyrds+a.phywrts)/÷_by) Percent, a.phyblkrd, a.phyblkwrt, (a.phyblkrd/greatest(a.phyrds,1)) brratio, (a.phyblkwrt/greatest(a.phywrts,1)) bwratio from stats$filestatxs a where a.snap_id=&&snap union select c.filename, c.phyrds, c.phywrts, (100*(c.phyrds+c.phywrts)/÷_by) Percent, c.phyblkrd, c.phyblkwrt,(c.phyblkrd/greatest(c.phyrds,1)) brratio, (c.phyblkwrt/greatest(c.phywrts,1)) bwratio from stats$tempstatxs c where c.snap_id=&&snap order by 1 / spool off pause Press enter to continue set feedback on verify on lines 80 pages 22 clear columns ttitle off undef snap
----------
physpctio.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select sid, username, round(100 * total_user_io/total_io,2) tot_io_pct from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_io from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name in ('physical reads', 'physical writes', 'physical writes direct', 'physical reads direct', 'physical writes direct (lob)', 'physical reads direct (lob)') group by b.sid, nvl(b.username,p.name)), (select sum(value) total_io from sys.v_$statname c, sys.v_$sesstat a where a.statistic#=c.statistic# and c.name in ('physical reads', 'physical writes', 'physical writes direct', 'physical reads direct', 'physical writes direct (lob)', 'physical reads direct (lob)')) order by 3 desc; ---------totpctio.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* SID, USERNAME, ROUND(100 * TOTAL_USER_IO/TOTAL_IO,2) TOT_IO_PCT FROM
SELECT
(SELECT b.SID SID, nvl(b.USERNAME,p.NAME) USERNAME, SUM(VALUE) TOTAL_USER_IO FROM sys.V_$STATNAME c, sys.V_$SESSTAT a, sys.V_$SESSION b, sys.v_$bgprocess p WHERE a.STATISTIC#=c.STATISTIC# and p.paddr (+) = b.paddr and b.SID=a.SID and c.NAME in ('physical reads','physical writes', 'consistent changes','consistent gets', 'db block gets','db block changes', 'physical writes direct', 'physical reads direct', 'physical writes direct (lob)', 'physical reads direct (lob)') GROUP BY b.SID, nvl(b.USERNAME,p.name)), (select sum(value) TOTAL_IO from sys.V_$STATNAME c, sys.V_$SESSTAT a WHERE a.STATISTIC#=c.STATISTIC# and c.NAME in ('physical reads','physical writes', 'consistent changes', 'consistent gets','db block gets', 'db block changes', 'physical writes direct', 'physical reads direct', 'physical writes direct (lob)', 'physical reads direct (lob)')) ORDER BY 3 DESC;
----------
topiousers.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select b.sid sid, decode (b.username,null,e.name,b.username) user_name, d.spid os_id, b.machine machine_name,
to_char(logon_time,'mm/dd/yy hh:mi:ss pm') logon_time, (sum(decode(c.name,'physical reads',value,0)) + sum(decode(c.name,'physical writes',value,0)) + sum(decode(c.name, 'physical writes direct',value,0)) + sum(decode(c.name, 'physical writes direct (lob)',value,0)) + sum(decode(c.name, 'physical reads direct (lob)',value,0)) + sum(decode(c.name, 'physical reads direct',value,0))) total_physical_io, (sum(decode(c.name,'db block gets',value,0)) + sum(decode(c.name, 'db block changes',value,0)) + sum(decode(c.name,'consistent changes',value,0)) + sum(decode(c.name,'consistent gets',value,0)) ) total_logical_io, 100 *(round ((sum (decode 100 (c.name, 'physical reads', value, 0)) sum (decode (c.name, 'physical reads direct', value, 0))) / (sum (decode (c.name, 'db block gets', value, 1)) + sum (decode (c.name, 'consistent gets', value, 0))),3)) hit_ratio, sum(decode(c.name,'sorts (disk)',value,0)) disk_sorts, sum(decode(c.name,'sorts (memory)',value,0)) memory_sorts, sum(decode(c.name,'sorts (rows)',value,0)) rows_sorted, sum(decode(c.name,'user commits',value,0)) commits, sum(decode(c.name,'user rollbacks',value,0)) rollbacks, sum(decode(c.name,'execute count',value,0)) executions, sum(decode(c.name,'physical reads',value,0)) physical_reads, sum(decode(c.name,'db block gets',value,0)) db_block_gets, sum(decode(c.name,'consistent gets',value,0)) consistent_gets, sum(decode(c.name,'consistent changes',value,0)) consistent_changes from sys.v_$sesstat a, sys.v_$session b, sys.v_$statname c, sys.v_$process d, sys.v_$bgprocess e where a.statistic#=c.statistic# and b.sid=a.sid
and d.addr = b.paddr and e.paddr (+) = b.paddr and c.name in ('physical reads', 'physical writes', 'physical writes direct', 'physical reads direct', 'physical writes direct (lob)', 'physical reads direct (lob)', 'db block gets', 'db block changes', 'consistent changes', 'consistent gets', 'sorts (disk)', 'sorts (memory)', 'sorts (rows)', 'user commits', 'user rollbacks', 'execute count' ) group by b.sid, d.spid, decode (b.username,null,e.name,b.username), b.machine, to_char(logon_time,'mm/dd/yy hh:mi:ss pm') order by 6 desc;
----------
DBWR_STAT.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
rem rem dbwr_stat.sql rem Mike Ault rem col name format a46 heading 'DBWR Statistic' col stat format 9,999,999,999,999 heading 'Statistic Value' set pages 40 ttitle 'DBWR Statistic Report' spool dbwr_stat select a.name,a.stat from (select name, value stat from v$sysstat where name not like '%redo%' and name not like '%remote%') a where (a.name like 'DBWR%' or a.name like '%buffer%' or a.name like '%write%' or name like '%summed%') union select class name, count "value" from v$waitstat where class='data block'
union select name ' ' to_char(block_size/1024) ' hit ratio' name, round(((1 - (physical_reads / (db_block_gets + consistent_gets))) * 100),3) s tat from V$buffer_pool_statistics union select name ' ' to_char(block_size/1024) ' free buffer wait' name,free_buffer _wait stat from V$buffer_pool_statistics union select name ' ' to_char(block_size/1024) ' buffer busy wait' name,buffer_busy _wait stat from V$buffer_pool_statistics union select name ' ' to_char(block_size/1024) ' write complete wait' name,write_co mplete_wait stat from V$buffer_pool_statistics / spool off set pages 22 ttitle off
----------
10g_filehist.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* begin_time, end_time, a.file_id, file_name, average_read_time, average_write_time, physical_reads, physical_writes, physical_block_reads, physical_block_writes
select
-10g_filehistogram.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes
------
with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* b.file_id, file_name, singleblkrdtim_milli, singleblkrds
select
----------
seg_top_logreads_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select object_name "Object Name" , tablespace_name "Tablespace Name" , object_type "Object Type" , logical_reads_total "Logical Reads" , ratio "%Total" from( select n.owner '.' n.object_name decode(n.subobject_name,null,null,'.' n.sub object_name) object_name , n.tablespace_name , case when length(n.subobject_name) < 11 then n.subobject_name else substr(n.subobject_name,length(n.subobject_name)-9) end subobject_name , n.object_type , r.logical_reads_total , round(r.ratio * 100, 2) ratio from dba_hist_seg_stat_obj n , (select * from (select e.dataobj# , e.obj# , e.dbid , e.logical_reads_total - nvl(b.logical_reads_total, 0) log ical_reads_total , ratio_to_report(e.logical_reads_total - nvl(b.logical_rea ds_total, 0)) over () ratio from dba_hist_seg_stat e
, dba_hist_seg_stat b where b.snap_id = 2694 and e.snap_id = 2707 and b.dbid = 37933856 and e.dbid = 37933856 and b.instance_number = 1 and e.instance_number = 1 and e.obj# = b.obj# and e.dataobj# = b.dataobj# and e.logical_reads_total - nvl(b.logical_reads_total, 0) > 0 order by logical_reads_total desc) d where rownum <= 100) r where n.dataobj# = r.dataobj# and n.obj# = r.obj# and n.dbid = r.dbid ) order by logical_reads_total desc
----------
db_tbsp_io_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* tbsp Tablespace ios "I/O Activity" e.tsname tbsp sum (e.phyrds - nvl(b.phyrds,0)) + sum (e.phywrts - nvl(b.phywrts,0)) ios dba_hist_filestatxs e dba_hist_filestatxs b b.snap_id(+) = &pBgnSnap e.snap_id = &pEndSnap b.dbid(+) = &pDbId e.dbid = &pDbId b.dbid(+) = e.dbid b.instance_number(+) = &pInstNum e.instance_number = &pInstNum b.instance_number(+) = e.instance_number b.file# = e.file# ( (e.phyrds - nvl(b.phyrds,0) ) + (e.phywrts - nvl(b.phywrts,0)) ) > 0 by e.tsname
select , From ( select , from , where and and and and and and and and and
group union select e.tsname tbsp , sum (e.phyrds - nvl(b.phyrds,0)) + sum (e.phywrts - nvl(b.phywrts,0)) ios from dba_hist_tempstatxs e , dba_hist_tempstatxs b where b.snap_id(+) = &pBgnSnap
e.snap_id = &pEndSnap b.dbid(+) = &pDbId e.dbid = &pDbId b.dbid(+) = e.dbid b.instance_number(+) = &pInstNum e.instance_number = &pInstNum b.instance_number(+) = e.instance_number b.file# = e.file# ( (e.phyrds - nvl(b.phyrds,0) ) + (e.phywrts - nvl(b.phywrts,0) ) ) > 0 group by e.tsname )
----------
wait_time_detail_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
prompt prompt This will compare values from dba_hist_waitstat with prompt detail information from dba_hist_active_sess_history. prompt set pages 999 set lines 80 break on snap_time skip 2 col col col col col col snap_time file_name object_type object_name wait_count time heading heading heading heading heading heading 'Snap Time' 'File Name' 'Object Type' 'Object Name' 'Wait Count' 'Time' format format format format format format a20 a40 a10 a20 999,999 999,999
select to_char(begin_interval_time,'yyyy-mm-dd hh24:mi') snap_time, -- file_name, object_type, object_name, wait_count, time from dba_hist_waitstat wait, dba_hist_snapshot snap, dba_hist_active_sess_history ash, dba_data_files df, dba_objects obj where wait.snap_id = snap.snap_id and wait.snap_id = ash.snap_id
and df.file_id = ash.current_file# and obj.object_id = ash.current_obj# and wait_count > 50 order by to_char(begin_interval_time,'yyyy-mm-dd hh24:mi'), file_name ;
----------
phys_disk_reads_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
break on begin_interval_time skip 2 column phyrds format 999,999,999 column begin_interval_time format a25 select begin_interval_time, filename, phyrds from dba_hist_filestatxs natural join dba_hist_snapshot ;
----------
rpt_10g_sysstat.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
prompt prompt This will query the dba_hist_sysstat view to display all values prompt that exceed the value specified in prompt the "where" clause of the query. prompt set pages 999
break on snap_time skip 2 accept stat_name char prompt 'Enter Statistic Name: '; accept stat_value number prompt 'Enter Statistics Threshold value: '; col snap_time col value format a19 format 999,999,999
select to_char(begin_interval_time,'yyyy-mm-dd hh24:mi') snap_time, value from dba_hist_sysstat natural join dba_hist_snapshot where stat_name = '&stat_name' and value > &stat_value order by to_char(begin_interval_time,'yyyy-mm-dd hh24:mi') ;
----------
hot_write_files_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
prompt prompt This will identify any single file who's write I/O prompt is more than 25% of the total write I/O of the database. prompt set pages 999 break on snap_time skip 2 col filename col phywrts col snap_time format a40 format 999,999,999 format a20
select to_char(begin_interval_time,'yyyy-mm-dd hh24:mi') snap_time, filename, phywrts from dba_hist_filestatxs natural join dba_hist_snapshot where phywrts > 0
and phywrts * 4 > ( select avg(value) all_phys_writes from dba_hist_sysstat natural join dba_hist_snapshot where stat_name = 'physical writes' and value > 0 ) order by to_char(begin_interval_time,'yyyy-mm-dd hh24:mi'), phywrts desc ;
----------
rpt_sysstat_hr_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
prompt prompt prompt This will query the dba_hist_sysstat view to prompt display average values by hour of the day prompt set pages 999 break on snap_time skip 2 accept stat_name char prompt 'Enter Statistics Name: '; col snap_time col avg_value format a19 format 999,999,999
select to_char(begin_interval_time,'hh24') snap_time, avg(value) avg_value from dba_hist_sysstat natural join dba_hist_snapshot where stat_name = '&stat_name' group by to_char(begin_interval_time,'hh24') order by
to_char(begin_interval_time,'hh24') ;
----------
rpt_sysstat_dy_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
prompt prompt This will query the dba_hist_sysstat view to display prompt average values by day-of-the-week prompt set pages 999 accept stat_name char prompt 'Enter Statistic Name: '; col snap_time col avg_value format a19 format 999,999,999
select to_char(begin_interval_time,'day') snap_time, avg(value) avg_value from dba_hist_sysstat natural join dba_hist_snapshot where stat_name = '&stat_name' group by to_char(begin_interval_time,'day') order by decode( to_char(begin_interval_time,'day'), 'sunday',1, 'monday',2, 'tuesday',3, 'wednesday',4, 'thursday',5, 'friday',6, 'saturday',7 ) ;
-reads_10g.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes
------
with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
break on begin_interval_time skip 2 column phyrds format 999,999,999 column begin_interval_time format a25 select begin_interval_time, filename, phyrds from dba_hist_filestatxs natural join dba_hist_snapshot;
-snapfileio_10g.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* rem rem NAME: snapfileio.sql rem FUNCTION: Reports on the file io status of all of the rem FUNCTION: datafiles in the database for a single snapshot. column column column column column column column column column column column column sum_io1 new_value st1 noprint sum_io2 new_value st2 noprint sum_io new_value divide_by noprint Percent format 999.999 heading 'Percent Of IO' brratio format 999.99 heading 'Block Read Ratio' bwratio format 999.99 heading 'Block Write Ratio' phyrds heading 'Physical Reads' phywrts heading 'Physical Writes' phyblkrd heading 'Physical Block Reads' phyblkwrt heading 'Physical Block Writes' filename format a45 heading 'File Name' file# format 9999 heading 'File'
set feedback off verify off lines 132 pages 60 sqlbl on trims on select nvl(sum(a.phyrds+a.phywrts),0) sum_io1 from dba_hist_filestatxs a where snap_id=&&snap;
select nvl(sum(b.phyrds+b.phywrts),0) sum_io2 from dba_hist_tempstatxs b where snap_id=&&snap; select &st1+&st2 sum_io from dual; rem @title132 'Snap&&snap File I/O Statistics Report' spool rep_out\&db\fileio&&snap select a.filename, a.phyrds, a.phywrts, (100*(a.phyrds+a.phywrts)/÷_by) Percent, a.phyblkrd, a.phyblkwrt, (a.phyblkrd/greatest(a.phyrds,1)) brratio, (a.phyblkwrt/greatest(a.phywrts,1)) bwratio from dba_hist_filestatxs a where a.snap_id=&&snap union select c.filename, c.phyrds, c.phywrts, (100*(c.phyrds+c.phywrts)/÷_by) Percent, c.phyblkrd, c.phyblkwrt,(c.phyblkrd/greatest(c.phyrds,1)) brratio, (c.phyblkwrt/greatest(c.phywrts,1)) bwratio from dba_hist_tempstatxs c where c.snap_id=&&snap order by 1 / spool off pause Press enter to continue set feedback on verify on lines 80 pages 22 clear columns ttitle off undef snap
-snapdeltafileio_awr.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* rem rem NAME: snapdeltafileio_awr.sql rem rem FUNCTION: Reports on the file io status of all of rem FUNCTION: the datafiles in the database across rem FUNCTION: two snapshots. rem HISTORY:
WHAT Created
WHEN 11/19/03
column sum_io1 new_value st1 noprint column sum_io2 new_value st2 noprint column sum_io new_value divide_by noprint column Percent format 999.999 heading 'Percent Of IO' column brratio format 999.99 heading 'Block Read Ratio' column bwratio format 999.99 heading 'Block Write Ratio' column phyrds heading 'Physical Reads' column phywrts heading 'Physical Writes' column phyblkrd heading 'Physical Block Reads' column phyblkwrt heading 'Physical Block Writes' column filename format a45 heading 'File Name' column file# format 9999 heading 'File' set feedback off verify off lines 132 pages 60 sqlbl on trims on select nvl(sum((b.phyrds-a.phyrds)+(b.phywrts-a.phywrts)),0) sum_io1 from dba_hist_filestatxs a, dba_hist_filestatxs b where a.snap_id=&&first_snap_id and b.snap_id=&&sec_snap_id and a.filename=b.filename; select nvl(sum((b.phyrds-a.phyrds)+(b.phywrts-a.phywrts)),0) sum_io2 from dba_hist_tempstatxs a, dba_hist_tempstatxs b where a.snap_id=&&first_snap_id and b.snap_id=&&sec_snap_id and a.filename=b.filename; select &st1+&st2 sum_io from dual; rem @title132 'Snap &&first_snap_id to &&sec_snap_id File I/O Statistics Report' spool rep_out\&db\fileio'&&first_snap_id'_to_'&&sec_snap_id' select a.filename, b.phyrds -a.phyrds phyrds, b.phywrts-a.phywrts phywrts, (100*((b.phyrds-a.phyrds)+(b.phywrts-a.phywrts))/÷_by) Percent, b.phyblkrd- a.phyblkrd phyblkrd, b.phyblkwrt-a.phyblkwrt phyblgwrt, ((b.phyblkrd-a.phyblkrd)/greatest((b.phyrds-a.phyrds),1)) brratio, ((b.phyblkwrt-a.phyblkwrt)/greatest((b.phywrts-a.phywrts),1)) bwratio from dba_hist_filestatxs a, dba_hist_filestatxs b where a.snap_id=&&first_snap_id and b.snap_id=&&sec_snap_id and a.filename=b.filename union select c.filename, d.phyrds-c.phyrds phyrds, d.phywrts-c.phywrts phywrts, (100*((d.phyrds-c.phyrds)+(d.phywrts-c.phywrts))/÷_by) Percent, d.phyblkrd-c.phyblkrd phyblkrd, d.phyblkwrt-c.phyblkwrt phyblgwrt, ((d.phyblkrd-c.phyblkrd)/greatest((d.phyrds-c.phyrds),1)) brratio, ((d.phyblkwrt-c.phyblkwrt)/greatest((d.phywrts-c.phywrts),1)) bwratio from dba_hist_tempstatxs c, dba_hist_tempstatxs d
where c.snap_id=&&first_snap_id and d.snap_id=&&sec_snap_id and c.filename=d.filename order by 1 / spool off pause Press enter to continue set feedback on verify on lines 80 pages 22 clear columns ttitle off undef first_snap_id undef sec_snap_id
----------
awr_physrds.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
break on begin_interval_time skip 1 column phyrds format 999,999,999 column begin_interval_time format a25 column file_name format a45 select begin_interval_time, filename, phyrds from dba_hist_filestatxs natural join dba_hist_snapshot order by begin_interval_time ;
----------
latchdet.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* name,
select
gets, round(misses*100/decode(gets,0,1,gets),2) misses, round(spin_gets*100/decode(misses,0,1,misses),2) spins, immediate_gets igets, round(immediate_misses*100/ decode(immediate_gets,0,1,immediate_gets),2) imisses, sleeps from sys.v_$latch order by 2 desc;
----------
Latch_sleep.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
REM REM Script to determine sleeps for latches REM M. R. Ault 2005 REM col name format a30 heading 'Latch Name' col gets format 99,999,999,999 heading 'Gets' col misses format 9,999,999,999 heading 'Misses' col sleeps format 999,999,999 heading 'Sleeps' set pages 55 ttitle80 'Latches Contention Report' spool latches_con select name,gets,misses,sleeps from v$latch where gets>0 and misses>0 order by g ets desc / spool off clear columns ttitle off
----------
waiters.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* busername wusername bsession_id wsession_id FORMAT a10 FORMAT a10 HEADING HEADING HEADING HEADING 'Holding 'Waiting 'Holding 'Waiting User' User' SID' SID'
SET LINES 132 PAGES 59 FEEDBACK OFF ECHO OFF ttitle 'Processes Waiting on Locks Report' SPOOL waiters SELECT holding_session bsession_id, waiting_session wsession_id, b.username busername, a.username wusername, c.lock_type type, mode_held, mode_requested, lock_id1, lock_id2 FROM sys.v_$session b, sys.dba_waiters c, sys.v_$session a WHERE c.holding_session=b.sid and c.waiting_session=a.sid ; SPOOL OFF PAUSE press Enter to continue CLEAR COLUMNS SET LINES 80 PAGES 22 FEEDBACK ON TTITLE OFF
----------
blockers.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* username session_id mode_held mode_requested lock_id1 lock_id2 type FORMAT a10 FORMAT FORMAT FORMAT FORMAT a10 a10 a10 a10 HEADING HEADING HEADING HEADING HEADING HEADING HEADING 'Holding User' 'SID' 'Mode Held' 'Mode Requested' 'Lock ID1' 'Lock ID2' 'Lock Type'
SET LINES 132 PAGES 59 FEEDBACK OFF ECHO OFF ttitle 'Sessions Blocking Other Sessions Report' SPOOL blockers
SELECT a.session_id, username, type, mode_held, mode_requested, lock_id1, lock_id2 FROM sys.v_$session b, sys.dba_blockers c, sys.dba_lock a WHERE c.holding_session=a.session_id AND c.holding_session=b.sid ; SPOOL OFF PAUSE press Enter to continue CLEAR COLUMNS SET LINES 80 PAGES 22 FEEDBACK ON
----------
ddl_lock.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* owner session_id mode_held mode_requested type name FORMAT FORMAT FORMAT FORMAT FORMAT FORMAT a7 9999 a7 a7 a20 a21 HEADING 'User' HEADING 'SID XE "SID" ' HEADING 'Lock Mode Held' HEADING 'Lock Mode Request' HEADING 'Type Object' HEADING 'Object Name'
SET FEEDBACK OFF ECHO OFF PAGES 48 LINES 79 ttitle 'Report on All DDL Locks Held' SPOOL ddl_lock SELECT NVL(owner,'SYS') owner, session_id, name, type, mode_held, mode_requested FROM sys.dba_ddl_locks ORDER BY 1,2,3 ; SPOOL OFF PAUSE press Enter/return to continue
----------
dml_lock.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* owner session_id mode_held mode_requested FORMAT a8 FORMAT a10 FORMAT a10 HEADING 'User' HEADING 'SID XE "SID" ' HEADING 'Mode Held' HEADING 'Mode Requested'
SET FEEDBACK OFF ECHO OFF PAGES 59 LINES 80 ttitle 'Report on All DML Locks Held' SPOOL dml_lock SELECT NVL(owner,'SYS') owner, session_id, name, mode_held, mode_requested FROM sys.dba_dml_locks ORDER BY 2 ; SPOOL OFF PAUSE press Enter to continue CLEAR COLUMNS SET FEEDBACK ON PAGES 22 LINES 80 TTITLE OFF
----------
int_lock.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* username session_id lock_type mode_held FORMAT a10 FORMAT a27 FORMAT a10 HEADING HEADING HEADING HEADING 'Lock 'User 'Lock 'Mode Holder' SID' Type' Held'
COLUMN mode_requested FORMAT a10 COLUMN lock_id1 FORMAT a30 COLUMN lock_id2 FORMAT a10
PROMPT 'ALL is all types or modes' ACCEPT lock PROMPT 'Enter Desired Lock Type: ' ACCEPT mode PROMPT 'Enter Lock Mode: ' SET LINES 132 PAGES 59 FEEDBACK OFF ECHO OFF VERIFY OFF BREAK ON username ttitle 'Report on Internal Locks Mode: &mode Type: &lock' SPOOL int_locks SELECT NVL(b.username,'SYS') username, session_id,lock_type,mode_held, mode_requested,lock_id1,lock_id2 FROM sys.dba_lock_internal a, sys.v_$session b WHERE UPPER(mode_held) like UPPER('%&mode%') OR UPPER('&mode')='ALL' AND UPPER(lock_type) like UPPER('%&lock%') OR UPPER(mode_held) like UPPER('%&mode%') OR UPPER('&mode')='ALL' AND UPPER('&lock')='ALL' AND a.session_id=b.sid ORDER BY 1,2 ; SPOOL OFF PAUSE press Enter to continue SET LINES 80 PAGES 22 FEEDBACK ON VERIFY ON CLEAR COLUMNS CLEAR BREAKS UNDEF LOCK UNDEF MODE
----------
Waits_file.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
REM REM Waits per Datafile report REM M. Ault 2005 REM
name format a66 heading 'Data File Name' count format 999,999,999 heading 'Wait Count' file# heading 'File#' format 9,999 wait_time heading 'Time' ratio heading 'Time Count' format 999.99
set pages 47 compute sum of count on report break on report ttitle 'Waits Per Datafile' set lines 132 spool waits_file SELECT file#, name, count, time wait_time, time/count ratio FROM x$kcbfwait, v$datafile WHERE indx + 1 = file# AND time>0 Order By count DESC / spool off clear columns clear computes ttitle off set pages 22 lines 80
----------
Waits_file.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
col name format a50 heading 'Data File Name' col count format 999,999,999 heading 'Wait Count' col file# heading 'File#' format 9,999 col wait_time heading 'Time' col ratio heading 'Time Count' format 999.99 set pages 47 compute sum of count on report break on report ttitle 'Waits Per Datafile' set lines 132 spool waits_file SELECT file#, name, count, time wait_time, time/count ratio FROM x$kcbfwait, v$datafile WHERE indx + 1 = file# AND time>0 Order By count DESC / spool off clear columns
----------
10g_sysclasssum.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* wait_class, total_waits, round(100 * (total_waits / sum_waits),2) pct_waits, round((time_waited / 100),2) time_waited_secs, round(100 * (time_waited / sum_time),2) pct_time
select
from (select wait_class, total_waits, time_waited from v$system_wait_class where wait_class != 'Idle'), (select sum(total_waits) sum_waits, sum(time_waited) sum_time from v$system_wait_class where wait_class != 'Idle') order by 5 desc
----------
10g_sysclasshist.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
col Time format a20 HEADING 'Time' col wait_class format a20 HEADING 'Wait Class' col time_waited format 999,999,999.99 HEADING 'Time Waited' select b.wait_class, to_char(a.end_time,'YYYY-MON-DD HH') Time,
sum(round((a.time_waited / 100),2)) time_waited from sys.v_$waitclassmetric_history a, sys.v_$system_wait_class b where a.wait_class# = b.wait_class# and b.wait_class != 'Idle' group by wait_class, to_char(a.end_time,'YYYY-MON-DD HH') order by 1,2
----------
10g_waithist.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* round((wait_time_milli / 1000),4) wait_time_secs, wait_count
select from sys.v_$event_histogram where event = 'db file scattered read' order by 2
----------
wt_events_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select event , waits "Waits" , time "Wait Time (s)" , pct*100 "Percent of Total" , waitclass "Wait Class" from (select e.event_name event , e.total_waits - nvl(b.total_waits,0) waits , (e.time_waited_micro - nvl(b.time_waited_micro,0))/100000 0 time , (e.time_waited_micro - nvl(b.time_waited_micro,0))/ (select sum(e1.time_waited_micro - nvl(b1.time_waited_mic ro,0)) from dba_hist_system_event b1 , dba_hist_system_event e1 where b1.snap_id(+) = b.snap_id and e1.snap_id = e.snap_id
, e.wait_class waitclass from dba_hist_system_event b , dba_hist_system_event e where b.snap_id(+) = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid(+) = &pDbId and e.dbid = &pDbId and b.instance_number(+) = &pInstNum and e.instance_number = &pInstNum and b.event_id(+) = e.event_id and e.total_waits > nvl(b.total_waits,0) and e.wait_class <> 'Idle' order by time desc, waits desc )
----------
sys_event_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select event "Event Name", waits "Waits", timeouts "Timeouts", time "Wait Time (s)", avgwait "Avg Wait (ms)", waitclass "Wait Class" from (select e.event_name event , e.total_waits - nvl(b.total_waits,0) waits , e.total_timeouts - nvl(b.total_timeouts,0) timeouts , (e.time_waited_micro - nvl(b.time_waited_micro,0))/1000000 time , decode ((e.total_waits - nvl(b.total_waits, 0)), 0, to_number(NULL) , ((e.time_waited_micro - nvl(b.time_waited_micro,0))/1000) / (e.total _waits - nvl(b.total_waits,0)) ) avgwait , e.wait_class waitclass from dba_hist_system_event b , dba_hist_system_event e where b.snap_id(+) = &pBgnSnap
and e.snap_id and b.dbid(+) and e.dbid and b.instance_number(+) and e.instance_number and b.event_id(+) and e.total_waits and e.wait_class order by time desc, waits desc
= &pEndSnap = &pDbId = &pDbId = &pInstNum = &pInstNum = e.event_id > nvl(b.total_waits,0) <> 'Idle' )
----------
wait_stat_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* e.class "E.CLASS" e.wait_count - nvl(b.wait_count,0) "Waits" e.time - nvl(b.time,0) "Total Wait Time (cs)" (e.time - nvl(b.time,0)) / (e.wait_count - nvl(b.wait_count,0)) "Avg Time (cs)" dba_hist_waitstat b dba_hist_waitstat e b.snap_id = &pBgnSnap e.snap_id = &pEndSnap b.dbid = &pDbId e.dbid = &pDbId b.dbid = e.dbid b.instance_number = &pInstNum e.instance_number = &pInstNum b.instance_number = e.instance_number b.class = e.class b.wait_count < e.wait_count by 3 desc, 2 desc
select , , , from , where and and and and and and and and and order
----------
ash_waitclass_waits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select begin_time, wait_class, average_waiter_count, dbtime_in_wait from dba_hist_waitclassmet_history where dbtime_in_wait >10 order by begin_time, wait_class, average_waiter_count DESC;
----------
latch_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select e.latch_name "Latch Name" , e.gets - b.gets "Get Requests" , to_number(decode(e.gets, b.gets, null, (e.misses - b.misses) * 100/(e.gets - b.gets))) "Percent Get Misses" , to_number(decode(e.misses, b.misses, null, (e.sleeps - b.sleeps)/(e.misses - b.misses))) "Avg Sleeps / Miss" , (e.wait_time - b.wait_time)/1000000 "Wait Time (s)" , e.immediate_gets - b.immediate_gets "No Wait Requests" , to_number(decode(e.immediate_gets, b.immediate_gets, null, (e.immediate_misses - b.immediate_misses) * 100 / (e.immediate_gets - b.immediate_gets))) "Percent No Wa it Miss" from dba_hist_latch b , dba_hist_latch e where b.snap_id = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid = &pDbId and e.dbid = &pDbId and b.dbid = e.dbid and b.instance_number = &pInstNum and e.instance_number = &pInstNum and b.instance_number = e.instance_number and b.latch_hash = e.latch_hash and e.gets - b.gets > 0 order by 1, 4
-------
This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* latchname "Latch Name", nwmisses "No Wait Misses", sleeps "Sleeps", waiter_sleeps "Waiter Sleeps" e.parent_name ' ' e.where_in_code latchname e.nwfail_count - nvl(b.nwfail_count,0) nwmisses e.sleep_count - nvl(b.sleep_count,0) sleeps e.wtr_slp_count - nvl(b.wtr_slp_count,0) waiter_sleeps dba_hist_latch_misses_summary b dba_hist_latch_misses_summary e b.snap_id(+) = &pBgnSnap e.snap_id = &pEndSnap b.dbid(+) = &pDbId e.dbid = &pDbId b.dbid(+) = e.dbid b.instance_number(+) = &pInstNum e.instance_number = &pInstNum b.instance_number(+) = e.instance_number b.parent_name(+) = e.parent_name b.where_in_code(+) = e.where_in_code e.sleep_count > nvl(b.sleep_count,0) by 1, 3 desc
select
From ( select , , , from , where and and and and and and and and and and ) order
----------
wait_time_detail_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
prompt prompt This will compare values from dba_hist_waitstat with prompt detail information from dba_hist_active_sess_history. prompt set pages 999 set lines 80 break on snap_time skip 2 col col col col snap_time file_name object_type object_name heading heading heading heading 'Snap Time' 'File Name' 'Object Type' 'Object Name' format format format format a20 a40 a10 a20
select to_char(begin_interval_time,'yyyy-mm-dd hh24:mi') snap_time, -- file_name, object_type, object_name, wait_count, time from dba_hist_waitstat wait, dba_hist_snapshot snap, dba_hist_active_sess_history ash, dba_data_files df, dba_objects obj where wait.snap_id = snap.snap_id and wait.snap_id = ash.snap_id and df.file_id = ash.current_file# and obj.object_id = ash.current_obj# and wait_count > 50 order by to_char(begin_interval_time,'yyyy-mm-dd hh24:mi'), file_name ;
----------
resource_waits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select ash.event, sum(ash.wait_time + ash.time_waited) ttl_wait_time from v$active_session_history ash where ash.sample_time between sysdate - 60/2880 and sysdate group by ash.event order by 2;
--
user_waiting.sql
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select sess.sid, sess.username, sum(ash.wait_time + ash.time_waited) wait_time from v$active_session_history ash, v$session sess where ash.sample_time > sysdate-1 and ash.session_id = sess.sid group by sess.sid, sess.username order by 3; < ash_list_events.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* break on wait_class skip 1 column event_name format a40 column wait_class format a20 select wait_class, event_name from dba_hist_event_name order by wait_class, event_name;
--------
ash_event_rollup.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose,
-- contact [email protected] -- ************************************************* ttitle 'High waits on events Rollup by hour' column column column column column mydate heading event total_waits time_waited total_timeouts 'Yr. Mo Dy Hr' format format heading 'tot waits' format heading 'time wait' format heading 'timeouts' format a13; a30; 999,999; 999,999; 9,999;
break on to_char(snap_time,'yyyy-mm-dd') skip 1; select to_char(e.sample_time,'yyyy-mm-dd HH24') mydate, e.event, count(e.event) total_waits, sum(e.time_waited) time_waited from v$active_session_history e where e.event not like '%timer' and e.event not like '%message%' and e.event not like '%slave wait%' having count(e.event) > 100 group by to_char(e.sample_time,'yyyy-mm-dd HH24'), e.event order by 1 ;
----------
ash_event_hist.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select swh.seq#, sess.sid, sess.username username, swh.event event, swh.p1, swh.p2 from v$session sess, v$session_wait_history swh where
----------
ash_sql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select h.sql_id, s.sql_text from dba_hist_active_sess_history h, v$sql s where h.session_id = 74 AND h.sql_id = s.sql_id AND TRUNC(h.sample_time) = TRUNC(SYSDATE) AND s.sql_fulltext like %orders% ;
----------
ash_event_count.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select h.sql_id, count(*) from dba_hist_active_sess_history h, v$sql s where h.sql_id = s.sql_id and s.sql_fulltext like %orders% having
----------
wait_time_detail.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
set pages 999 set lines 80 break on snap_time skip 2 col col col col col col snap_time file_name object_type object_name wait_count time heading heading heading heading heading heading 'Snap Time' 'File Name' 'Object Type' 'Object Name' 'Wait Count' 'Time' format format format format format format a20 a40 a10 a20 999,999 999,999
select to_char(begin_interval_time,'yyyy-mm-dd hh24:mi') snap_time, -- file_name, object_type, object_name, wait_count, time from dba_hist_waitstat wait, dba_hist_snapshot snap, dba_hist_active_sess_history ash, dba_data_files df, dba_objects obj where wait.snap_id = snap.snap_id and wait.snap_id = ash.snap_id and df.file_id = ash.current_file# and obj.object_id = ash.current_obj# and wait_count > 50 order by to_char(begin_interval_time,'yyyy-mm-dd hh24:mi'), file_name ;
----------
ash_wait_time.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select TO_CHAR(h.sample_time,'HH24') "Hour", Sum(h.wait_time/100) "Total Wait Time (Sec)" from v$active_session_history h, v$event_name n where h.session_state = 'ON CPU' and h.session_type = 'FOREGROUND' and h.event_id = n.EVENT_ID and n.wait_class <> 'Idle' group by TO_CHAR(h.sample_time,'HH24');
----------
ash_total_wait_time_dy.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select TO_CHAR(h.sample_time,'Day') "Hour", sum(h.wait_time/100) "Total Wait Time (Sec)" from v$active_session_history h, v$event_name n where h.session_state = 'ON CPU' and h.session_type = 'FOREGROUND' and h.event_id = n.EVENT_ID and n.wait_class <> 'Idle' group by
TO_CHAR(h.sample_time,'Day');
----------
ash_total_wait_time.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select h.event "Wait Event", SUM(h.wait_time/100) "Wait Time (Sec)" from v$active_session_history h, v$event_name n where h.session_state = 'ON CPU' and h.session_type = 'FOREGROUND' and h.event_id = n.EVENT_ID and to_char(h.sample_time,'HH24') = '12' and n.wait_class <> 'Idle' group by h.event order by 2 DESC;
----------
ash_file_wait_time_dy.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select f.file_name Data File , COUNT(*) Wait Number , SUM(h.time_waited) Total Time Waited from v$active_session_history h, dba_data_files f where h.current_file# = f.file_id
----------
ash_wait_time_sum.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select e.name "Wait Event", SUM(h.wait_time + h.time_waited) "Total Wait Time" from v$active_session_history h, v$event_name e where h.event_id = e.event_id and e.wait_class <> 'Idle' group by e.name order by 2 DESC;
----------
ash_total_wait_time_dy.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select s.sid, s.username, sum(h.wait_time + h.time_waited) "total wait time" from v$active_session_history h, v$session s, v$event_name e where h.session_id = s.sid and e.event_id = h.event_id and e.wait_class <> 'Idle'
----------
ash_hot_objects.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select o.owner, o.object_name, o.object_type, SUM(h.wait_time + h.time_waited) "total wait time" from v$active_session_history h, dba_objects o, v$event_name e where h.current_obj# = o.object_id and e.event_id = h.event_id and e.wait_class <> 'Idle' group by o.owner, o.object_name, o.object_type order by 4 DESC;
----------
ash_latch.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
break on begin_interval_time skip 1 column begin_interval_time format a25 column latch_name format a40
select begin_interval_time, latch_name, gets, misses, sleeps from dba_hist_latch natural join dba_hist_snapshot where (misses + sleeps ) > 0 order by begin_interval_time, misses DESC, sleeps DESC ;
----------
ash_trend.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
break on begin_interval_time skip 0 column stat_name format a25 select begin_interval_time, new.stat_name, (new.value - old.value) Difference from dba_hist_sys_time_model old, dba_hist_sys_time_model new, dba_hist_snapshot ss where new.stat_name = old.stat_name and new.snap_id = ss.snap_id and old.snap_id = ss.snap_id - 1 and new.stat_name like '%&stat_name%' order by begin_interval_time;
--
pid.sql
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
COLUMN terminal FORMAT a10 HEADING 'Terminal' COLUMN program FORMAT a30 HEADING 'Program' COLUMN pid FORMAT 9999 HEADING 'Process ID' COLUMN sid FORMAT 9999 HEADING 'Session ID' COLUMN osuser FORMAT A15 HEADING 'Operating System User' COLUMN spid FORMAT A7 HEADING 'OS Process ID' COLUMN serial# FORMAT 99999 HEADING 'Serial Number' SET LINES 132 PAGES 58 BREAK ON username COMPUTE COUNT OF pid ON username ttitle "Oracle Processes" SPOOL cur_proc SELECT NVL(a.username,'Null') username, b.pid, a.sid, DECODE(a.terminal,'?','Detached',a.terminal) terminal, b.program, b.spid, a.osuser, a.serial# FROM v$session a, v$process b WHERE a.PADDR = b.ADDR ORDER by a.username, b.pid ; SPOOL OFF CLEAR BREAKS CLEAR COLUMNS SET PAGES 22 TTITLE OFF PAUSE Press Enter to continue
----------
topsess.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select 'top physical i/o process' category, sid, username, total_user_io amt_used, round(100 * total_user_io/total_io,2) pct_used from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_io from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name in ('physical reads','physical writes', 'physical reads direct', 'physical reads direct (lob)', 'physical writes direct', 'physical writes direct (lob)') group by b.sid, nvl(b.username,p.name) order by 3 desc), (select sum(value) total_io from sys.v_$statname c, sys.v_$sesstat a where a.statistic#=c.statistic# and c.name in ('physical reads','physical writes', 'physical reads direct', 'physical reads direct (lob)', 'physical writes direct', 'physical writes direct (lob)')) where rownum < 2 union all select 'top logical i/o process', sid, username, total_user_io amt_used, round(100 * total_user_io/total_io,2) pct_used from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_io from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p
where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name in ('consistent gets','db block gets') group by b.sid, nvl(b.username,p.name) order by 3 desc), (select sum(value) total_io from sys.v_$statname c, sys.v_$sesstat a where a.statistic#=c.statistic# and c.name in ('consistent gets','db block gets')) where rownum < 2 union all select 'top memory process', sid, username, total_user_mem, round(100 * total_user_mem/total_mem,2) from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_mem from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name in ('session pga memory','session uga memory') group by b.sid, nvl(b.username,p.name) order by 3 desc), (select sum(value) total_mem from sys.v_$statname c, sys.v_$sesstat a where a.statistic#=c.statistic# and c.name in ('session pga memory','session uga memory') ) where rownum < 2 union all select 'top cpu process', sid, username,
total_user_cpu, round(100 * total_user_cpu/greatest(total_cpu,1),2) from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_cpu from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name = 'CPU used by this session' group by b.sid, nvl(b.username,p.name) order by 3 desc), (select sum(value) total_cpu from sys.v_$statname c, sys.v_$sesstat a where a.statistic#=c.statistic# and c.name = 'CPU used by this session' ) where rownum < 2;
-topsessdet.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select * from (select b.sid sid, decode (b.username,null,e.name,b.username) user_name, d.spid os_id, b.machine machine_name, to_char(logon_time,'mm/dd/yy hh:mi:ss pm') logon_time, (sum(decode(c.name,'physical reads',value,0)) + sum(decode(c.name,'physical writes',value,0)) + sum(decode(c.name,'physical writes direct',value,0)) + sum(decode(c.name,'physical writes direct (lob)',value,0)) + sum(decode(c.name,'physical reads direct (lob)',value,0))
+ sum(decode(c.name,'physical reads direct',value,0))) total_physical_io, (sum(decode(c.name,'db block gets',value,0)) + sum(decode(c.name,'db block changes',value,0)) + sum(decode(c.name,'consistent changes',value,0)) + sum(decode(c.name,'consistent gets',value,0)) ) total_logical_io, 100 100 * (round ((sum (decode (c.name, 'physical reads', value, 0)) sum (decode (c.name, 'physical reads direct', value, 0))) / (sum (decode (c.name, 'db block gets', value, 1)) + sum (decode (c.name, 'consistent gets', value, 0)) ),3)) hit_ratio, (sum(decode(c.name,'session pga memory',value,0))+ sum(decode(c.name,'session uga memory',value,0)) ) total_memory_usage, sum(decode(c.name,'parse count (total)',value,0)) parses, sum(decode(c.name,'CPU used by this session',value,0)) total_cpu, sum(decode(c.name,'parse time cpu',value,0)) parse_cpu, sum(decode(c.name,'recursive cpu usage',value,0)) recursive_cpu, sum(decode(c.name,'CPU used by this session',value,0)) sum(decode(c.name,'parse time cpu',value,0)) sum(decode(c.name,'recursive cpu usage',value,0)) other_cpu, sum(decode(c.name,'sorts (disk)',value,0)) disk_sorts, sum(decode(c.name,'sorts (memory)',value,0)) memory_sorts, sum(decode(c.name,'sorts (rows)',value,0)) rows_sorted, sum(decode(c.name,'user commits',value,0)) commits, sum(decode(c.name,'user rollbacks',value,0)) rollbacks, sum(decode(c.name,'execute count',value,0)) executions, sum(decode(c.name,'physical reads',value,0)) physical_reads, sum(decode(c.name,'db block gets',value,0)) db_block_gets, sum(decode(c.name,'consistent gets',value,0)) consistent_gets, sum(decode(c.name,'consistent changes',value,0)) consistent_changes from sys.v_$sesstat a, sys.v_$session b, sys.v_$statname c, sys.v_$process d, sys.v_$bgprocess e where a.statistic#=c.statistic# and b.sid=a.sid and d.addr = b.paddr and e.paddr (+) = b.paddr and c.name in ('physical reads', 'physical writes', 'physical writes direct', 'physical reads direct', 'physical writes direct (lob)', 'physical reads direct (lob)',
'db block gets', 'db block changes', 'consistent changes', 'consistent gets', 'session pga memory', 'session uga memory', 'parse count (total)', 'CPU used by this session', 'parse time cpu', 'recursive cpu usage', 'sorts (disk)', 'sorts (memory)', 'sorts (rows)', 'user commits', 'user rollbacks', 'execute count' ) group by b.sid, d.spid, decode (b.username,null,e.name,b.username), b.machine, to_char(logon_time,'mm/dd/yy hh:mi:ss pm') order by 6 desc);
----------
sesswaits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* b.sid, decode(b.username,NULL,c.name,b.username) process_name, event, a.total_waits, round((a.time_waited / 100),2) time_wait_sec,a.total_timeouts, round((average_wait / 100),2) average_wait_sec, round((a.max_wait / 100),2) max_wait_sec FROM sys.v_$session_event a, sys.v_$session b, sys.v_$bgprocess c
SELECT
WHERE event NOT IN ('lock element cleanup', 'pmon timer', 'rdbms ipc message', 'smon timer',
'SQL*Net message from client', 'SQL*Net break/reset to client', 'SQL*Net message to client', 'SQL*Net more data to client', 'dispatcher timer', 'Null event', 'parallel query dequeue wait', 'parallel query idle wait - Slaves', 'pipe get', 'PL/SQL lock timer', 'slave wait', 'virtual circuit status', 'WMON goes to sleep' ) and event NOT LIKE 'DFS%' and event NOT LIKE 'KXFX%' and a.sid = b.sid and b.paddr = c.paddr (+) order by 4 desc;
----------
csesswaits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* a.sid, decode(b.username,NULL,c.name,b.username) process_name, a.event, a.seconds_in_wait, a.wait_time, a.state, a.p1text, a.p1, a.p1raw, a.p2text, a.p2, a.p2raw, a.p3text, a.p3, a.p3raw FROM sys.v_$session_wait a, sys.v_$session b, sys.v_$bgprocess c
SELECT
WHERE event NOT IN ('lock element cleanup', 'pmon timer', 'rdbms ipc message',
'smon timer', 'SQL*Net message from client', 'SQL*Net break/reset to client', 'SQL*Net message to client', 'SQL*Net more data to client', 'dispatcher timer', 'Null event', 'parallel query dequeue wait', 'parallel query idle wait - Slaves', 'pipe get', 'PL/SQL lock timer', 'slave wait', 'virtual circuit status', 'WMON goes to sleep' ) and event NOT LIKE 'DFS%' and event NOT LIKE 'KXFX%' and a.sid = b.sid and b.paddr = c.paddr (+) order by 4 desc;
----------
sesshitrate.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* b.sid sid, decode (b.username,null,e.name,b.username) user_name, d.spid os_id, b.machine machine_name, to_char(logon_time,'mm/dd/yy hh:mi:ss pm') logon_time, 100 - 100 * (round ((sum (decode (c.name, 'physical reads', value, 0)) sum (decode (c.name, 'physical reads direct', value, 0)) sum(decode (c.name, 'physical reads direct (lob)', value, 0))) / (sum (decode (c.name, 'db block gets', value, 1)) + sum (decode (c.name, 'consistent gets', value, 0))),3)) hit_ratio
select
sys.v_$process d, sys.v_$bgprocess e where a.statistic#=c.statistic# and b.sid=a.sid and d.addr = b.paddr and e.paddr (+) = b.paddr and c.name in ('physical reads', 'physical reads direct', 'physical writes direct (lob)', 'physical reads direct (lob)', 'db block gets', 'consistent gets') group by b.sid, d.spid, decode (b.username,null,e.name,b.username), b.machine, to_char(logon_time,'mm/dd/yy hh:mi:ss pm') order by 6 desc;
-sqlhitrate.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select sql_text , b.username , 100 - round(100 * a.disk_reads/greatest(a.buffer_gets,1),2) hit_ratio from sys.v_$sqlarea a, sys.all_users b where a.parsing_user_id=b.user_id and b.username not in ('SYS','SYSTEM') order by 3 desc;
-memhog.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes
------
with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* sid, username, round(total_user_mem/1024,2) mem_used_in_kb, round(100 * total_user_mem/total_mem,2) mem_percent
select
from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_mem from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name in ('session pga memory','session uga memory') group by b.sid, nvl(b.username,p.name)), (select sum(value) total_mem from sys.v_$statname c, sys.v_$sesstat a where a.statistic#=c.statistic# and c.name in ('session pga memory','session uga memory')) order by 3 desc;
----------
bgact.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
(name like '%DBWR%' or name in ('dirty buffers inspected', 'summed dirty queue length', 'write requests')) or (name like '%redo%') order by 1;
----------
archhist.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select to_char(completion_time,'mm/dd/yy') completion_time, count(*) log_count from sys.v_$archived_log where sysdate - completion_time < 31 group by to_char(completion_time,'mm/dd/yy') order by 1 desc;
-rolldet.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select name, round ((rssize / 1024), 2) size_kb, shrinks, extends, gets, waits, writes, xacts, status,
round ((hwmsize / 1024), 2) hw_kb from sys.v_$rollstat a, sys.v_$rollname b where (a.usn = b.usn) order by name;
----------
10g_sesswaitclass.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* a.sid, b.username, a.wait_class, a.total_waits, round((a.time_waited / 100),2) time_waited_secs
select
from sys.v_$session_wait_class a, sys.v_$session b where b.sid = a.sid and b.username is not null and a.wait_class != 'Idle' order by 1,2,5 desc
----------
10g_last10waits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* a.seq# wait_number, a.event, c.wait_class wait_class, round((a.wait_time / 100),2) wait_time_secs, a.p1text,
select
a.p1, a.p2text, a.p2, a.p3text, a.p3 from sys.v_$session_wait_history a, sys.v_$session b, sys.v_$event_name c where a.sid = b.sid and a.event# = c.event# and b.sid = 249 order by 1,3
----------
10g_usertime.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* a.sid, b.username, a.stat_name, round((a.value / 1000000),3) time_secs
select
from sys.v_$sess_time_model a, sys.v_$session b where a.sid = b.sid and b.sid = < enter SID > order by 4 desc
----------
histsesstime.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select
sess_id, username, program, sess_time, round(100 * (sess_time / total_time),2) pct_time_waited from (select a.session_id sess_id, decode(session_type,'BACKGROUND',session_type,c.username) username, a.program program, sum(a.time_waited) sess_time from sys.v_$active_session_history a, sys.v_$event_name b, sys.dba_users c where a.event# = b.event# and a.user_id = c.user_id and sample_time > '23-SEP-04 12:00:00 AM' and sample_time < '25-SEP-04 12:00:00 AM' group by a.session_id, decode(session_type,'BACKGROUND',session_type,c.username), a.program), (select sum(a.time_waited) total_time from sys.v_$active_session_history a, sys.v_$event_name b where a.event# = b.event# and sample_time > '23-SEP-04 12:00:00 AM' and sample_time < '25-SEP-04 12:10:00 AM' ) order by 5 desc
----------
bg_event_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select event "Event Name", waits "Waits", timeouts "Timeouts", time "Wait Time (s)", avgwait "Avg Wait (ms)", waitclass "Wait Class" from (select e.event_name event , e.total_waits - nvl(b.total_waits,0) waits
, e.total_timeouts - nvl(b.total_timeouts,0) timeouts , (e.time_waited_micro - nvl(b.time_waited_micro,0))/1000000 time , decode ((e.total_waits - nvl(b.total_waits, 0)), 0, to_number(NULL) , ((e.time_waited_micro - nvl(b.time_waited_micro,0))/1000) / (e.total _waits - nvl(b.total_waits,0)) ) avgwait , e.wait_class waitclass from dba_hist_bg_event_summary b , dba_hist_bg_event_summary e where b.snap_id(+) = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid(+) = &pDbId and e.dbid = &pDbId and b.instance_number(+) = &pInstNum and e.instance_number = &pInstNum and b.event_id(+) = e.event_id and e.total_waits > nvl(b.total_waits,0) and e.wait_class <> 'Idle' ) order by time desc, waits desc
----------
globaccpatt.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select name, value from sys.v_$sysstat where name in ('table scans (cache partitions)', 'table scans (direct read)', 'table scans (long tables)', 'table scans (rowid ranges)', 'table scans (short tables)', 'table fetch by rowid', 'table fetch continued row') order by 1;
-chaincnt.sql -- *************************************************
--------
Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* count(*)
----------
chainpct.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select round(100 * (chained_row_fetches / total_fetches),2) pct_chain_access from (select value as chained_row_fetches from sys.v_$sysstat a where name = 'table fetch continued row'), (select sum(value) as total_fetches from sys.v_$sysstat where name in ('table fetch by rowid', 'table scan rows gotten'));
-----------
chaintables.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* chained_rows.sql
-- FUNCTION: Show percentage of chained rows -- tables must have been analyzed -- MRA -column "Chain Percent" format 999.99 column table_name heading 'Table Name' column chain_cnt heading 'Chained Rows' column num_rows heading 'Row Count' set pages 47 set feedback off ttitle 'Chained Rows Report' spool chained_rows select table_name,chain_cnt, num_rows, chain_cnt/num_rows*100 "Chain Percent" fr om dba_tables where chain_cnt>1 and owner not in ('SYS','SYSTEM'); spool off ttitle off
----------
maxext8.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* owner, decode(partition_name,NULL,segment_name,segment_name '.' partition_name) segment_name, segment_type, extents, max_extents, initial_extent, next_extent, tablespace_name
select
from sys.dba_segments where max_extents - extents <= 5 and segment_type <> 'CACHE' order by 1,2,3;
-objdef.sql -- *************************************************
--------
Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select a.owner, a.segment_name, a.segment_type, a.tablespace_name, a.next_extent, max(c.bytes) max_contig_space from sys.dba_segments a, sys.dba_free_space c where a.tablespace_name = c.tablespace_name and a.next_extent > (select max(bytes) from sys.dba_free_space b where a.tablespace_name = b.tablespace_name and b.tablespace_name = c.tablespace_name) group by a.owner, a.segment_name, a.tablespace_name, a.segment_type, a.next_extent
----------
tabreorg8.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* /*+ RULE */ owner, segment_name table_name, segment_type, round(bytes/1024,2) table_kb, num_rows, blocks, empty_blocks, hwm highwater_mark, avg_used_blocks,
select
greatest(round(100 * (nvl(hwm - avg_used_blocks,0) / greatest(nvl(hwm,1),1) ),2),0) block_inefficiency, chain_pct, max_extent_pct, extents, max_extents, decode(greatest(max_free_space next_extent,0),0,'n','y') can_extend_space, next_extent, max_free_space, o_tablespace_name tablespace_name from (select a.owner owner, segment_name, segment_type, bytes, num_rows, a.blocks blocks, b.empty_blocks empty_blocks, a.blocks - b.empty_blocks - 1 hwm, decode(round((b.avg_row_len * num_rows * (1 + (pct_free/100))) / c.blocksize,0),0,1,round((b.avg_row_len * num_rows * (1 + (pct_free/100))) / c.blocksize,0)) + 2 avg_used_blocks, round(100 * (nvl(b.chain_cnt,0) / greatest(nvl(b.num_rows,1),1)),2) chain_pct, a.extents extents, round(100 * (a.extents / a.max_extents),2) max_extent_pct, a.max_extents max_extents, b.next_extent next_extent, b.tablespace_name o_tablespace_name from sys.dba_segments a, sys.dba_all_tables b, sys.ts$ c where ( a.owner = b.owner ) and ( segment_name = table_name ) and ( ( segment_type = 'TABLE ) ) and b.tablespace_name = c.name union all select a.owner owner, segment_name '.' b.partition_name, segment_type, bytes, b.num_rows, a.blocks blocks, b.empty_blocks empty_blocks, a.blocks - b.empty_blocks - 1 hwm, decode(round((b.avg_row_len * b.num_rows * (1 + (b.pct_free/100))) / c.blocksize,0),0,1,round((b.avg_row_len * b.num_rows * (1 + (b.pct_free/100))) / c.blocksize,0)) + 2 avg_used_blocks, round(100 * (nvl(b.chain_cnt,0) / greatest(nvl(b.num_rows,1),1)),2)
chain_pct, a.extents extents, round(100 * (a.extents / a.max_extents),2) max_extent_pct, a.max_extents max_extents, b.next_extent, b.tablespace_name o_tablespace_name from sys.dba_segments a, sys.dba_tab_partitions b, sys.ts$ c, sys.dba_tables d where ( a.owner = b.table_owner ) and ( segment_name = b.table_name ) and ( ( segment_type = TABLE PARTITION' ) ) and b.tablespace_name = c.name and d.owner = b.table_owner and d.table_name = b.table_name and a.partition_name = b.partition_name), ( select tablespace_name f_tablespace_name, max(bytes) max_free_space from sys.dba_free_space group by tablespace_name) where f_tablespace_name = o_tablespace_name and greatest(round(100 * (nvl(hwm - avg_used_blocks,0) / greatest(nvl(hwm,1),1) ),2),0) > 25 order by 10 desc, 1 asc,2 asc
-idxreorg8.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select /*+ RULE */ owner, segment_name index_name, segment_type, round(bytes/1024,2) index_kb, num_rows, clustering_factor, blevel, blocks, max_extent_pct, extents, max_extents, decode(greatest(max_free_space next_extent,0),0,'n','y') can_extend_space,
next_extent, max_free_space, o_tablespace_name from (select a.owner owner, segment_name, segment_type, bytes, num_rows, b.clustering_factor, b.blevel, a.blocks blocks, a.extents extents, round(100 * (a.extents / a.max_extents),2) max_extent_pct, a.max_extents max_extents, b.next_extent next_extent, b.tablespace_name o_tablespace_name from sys.dba_segments a, sys.dba_indexes b, sys.ts$ c where ( a.owner = b.owner ) and ( segment_name = index_name ) and ( ( segment_type = 'INDEX' ) ) and b.tablespace_name = c.name union all select a.owner owner, segment_name '.' b.partition_name, segment_type, bytes, b.num_rows, b.clustering_factor, b.blevel, a.blocks blocks, a.extents extents, round(100 * (a.extents / a.max_extents),2) max_extent_pct, a.max_extents max_extents, b.next_extent, b.tablespace_name o_tablespace_name from sys.dba_segments a, sys.dba_ind_partitions b, sys.ts$ c, sys.dba_indexes d where ( a.owner = b.index_owner ) and ( segment_name = b.index_name ) and ( ( segment_type = INDEX PARTITION' ) ) and b.tablespace_name = c.name and d.owner = b.index_owner and d.index_name = b.index_name and a.partition_name = b.partition_name), ( select tablespace_name f_tablespace_name, max(bytes) max_free_space
----------
cfb_ratio.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
-- Mike Ault -column table_name format a20 heading 'Table Name' column index_name format a20 heading 'Index Name' column dirty_blocks heading 'Dirty Blocks' column clustering_factor heading 'Clustering Factor' column cfb_ratio heading 'Clustering Factor To Blocks Ratio' format 99,999.99 column owner format a15 heading 'Owner' ttitle 'Clustering Factor to Block Ratio Report' set lines 132 verify off pages 55 feedback off break on owner on table_name spool rep_out\&&database\cfb_ratio select t.owner,t.table_name,i.index_name, t.num_rows, t.blocks dirty_blocks,i.cl ustering_factor, i.clustering_factor/decode(t.blocks,0,decode(i.clustering_factor,0,1,i.clusterin g_factor),t.blocks) cfb_ratio, i.blevel from dba_tables t, dba_indexes i where t.owner=i.table_owner and t.table_name=i.table_name and t.owner not in ('SYS','SYSTEM','DBAUTIL','OUTLN','DBSNMP','SPOTLIGHT','PERFS TAT','RMAN','IWATCH') order by t.owner,i.clustering_factor/decode(t.blocks,0,decode(i.clustering_facto r,0,1,i.clustering_factor),t.blocks) desc,t.table_name,i.index_name / spool off set lines 80 pages 22 feedback on verify on clear columns ttitle off rem and i.clustering_factor/decode(t.blocks,0,decode(i.clustering_factor,0,1,i.c lustering_factor),t.blocks)>10
-toptables.sql -- *************************************************
--------
Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select table_owner "table owner", table_name "table name", command "command issued", 0 - executions "executions", disk_reads "disk reads", gets "buffer gets", rows_processed "rows processed" from (select distinct executions, command, table_owner, table_name, gets, rows_processed, disk_reads from (select decode (a.command_type , 2, 'insert ' , 3,'select ', 6, 'update ' , 7, 'delete ' , 26,'table lock ') command , c.owner table_owner, c.name table_name , sum(a.disk_reads) disk_reads , sum(0 - a.executions) executions , sum(a.buffer_gets) gets , sum(a.rows_processed) rows_processed from sys.v_$sql a , sys.v_$object_dependency b , sys.v_$db_object_cache c where a.command_type in (2,3,6,7,26)and b.from_address = a.address and b.to_owner = c.owner and b.to_name= c.name and c.type = 'table' and c.owner not in ('SYS','SYSTEM') group by a.command_type , c.owner , c.name ) ) where rownum <= 100;
--
largescan9i.sql
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select table_owner, table_name, table_type, size_kb, statement_count, reference_count, executions, executions * reference_count total_scans from (select a.object_owner table_owner, a.object_name table_name, b.segment_type table_type, b.bytes / 1024 size_kb, sum(c.executions ) executions, count( distinct a.hash_value ) statement_count, count( * ) reference_count from sys.v_$sql_plan a, sys.dba_segments b, sys.v_$sql c where a.object_owner (+) = b.owner and a.object_name (+) = b.segment_name and b.segment_type IN ('TABLE', 'TABLE PARTITION') and a.operation LIKE '%TABLE%' and a.options = 'FULL' and a.hash_value = c.hash_value and b.bytes / 1024 > 1024 group by a.object_owner, a.object_name, a.operation, b.bytes / 1024, b.segment_type order by 4 desc, 1, 2 );
--
awr_sql_object_char.sql
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* format a13 format a15 format a25 format 9,999,999 format 9,999,999
col c1 heading Owner col c2 heading Object Type col c3 heading Object Name col c4 heading Average CPU Cost col c5 heading Average IO Cost break on c1 skip 2 break on c2 skip 2 select p.object_owner c1, p.object_type c2, p.object_name c3, avg(p.cpu_cost) c4, avg(p.io_cost) c5 from dba_hist_sql_plan p where p.object_name is not null and p.object_owner <> 'SYS' group by p.object_owner, p.object_type, p.object_name order by 1,2,4 desc ;
----------
awr_sql_object_char_detail.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
accept tabname prompt Enter Table Name: col c0 heading Begin Interval time col c1 heading Owner format a8 format a10
c2 c3 c4 c5
break on c1 skip 2 break on c2 skip 2 select to_char(sn.begin_interval_time,'mm-dd hh24') c0, p.object_owner c1, p.object_type c2, p.object_name c3, avg(p.cpu_cost) c4, avg(p.io_cost) c5 from dba_hist_sql_plan p, dba_hist_sqlstat st, dba_hist_snapshot sn where p.object_name is not null and p.object_owner <> 'SYS' and p.object_name = 'CUSTOMER_DETS' and p.sql_id = st.sql_id and st.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'mm-dd hh24'), p.object_owner, p.object_type, p.object_name order by 1,2,3 desc ;
----------
awr_nested_join_alert.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* c1 c2 c3 c4 c5 heading heading heading heading heading Date Nested Loops Count Rows Processed Disk Reads CPU Time format format format format format a20 99,999,999 99,999,999 99,999,999 99,999,999
accept nested_thr char prompt Enter Nested Join Threshold: ttitle Nested Join Threshold &nested_thr
select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(*) c2, sum(st.rows_processed_delta) c3, sum(st.disk_reads_delta) c4, sum(st.cpu_time_delta) c5 from dba_hist_snapshot sn, dba_hist_sql_plan p, dba_hist_sqlstat st where st.sql_id = p.sql_id and sn.snap_id = st.snap_id and p.operation = NESTED LOOPS having count(*) > &hash_thr group by begin_interval_time;
----------
awr_sql_index.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
col c0 heading Begin Interval time format a8 col c1 heading Index Name format a20 col c2 heading Disk Reads format 99,999,999 col c3 heading Rows Processed format 99,999,999 select to_char(s.begin_interval_time,'mm-dd hh24') c0, p.object_name c1, sum(t.disk_reads_total) c2, sum(t.rows_processed_total) c3 from dba_hist_sql_plan p, dba_hist_sqlstat t, dba_hist_snapshot s where p.sql_id = t.sql_id and t.snap_id = s.snap_id and
p.object_type like '%INDEX%' group by to_char(s.begin_interval_time,'mm-dd hh24'), p.object_name order by c0,c1,c2 desc ;
-awr_sql_index_access.sql --************************************************* -- Copyright 2005 by Rampant TechPress Inc. -- Free for non-commercial use! -- To license, e-mail [email protected] -- ************************************************ col col col col c1 c2 c3 c4 heading heading heading heading Begin Index Index Index Interval Time format a20 Range Scans format 999,999 Unique Scans format 999,999 Full Scans format 999,999
select r.c1 c1, r.c2 c2, u.c2 c3, f.c2 c4 from ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.operation like '%INDEX%' and p.options like '%RANGE%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) r, ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn
where p.object_owner <> 'SYS' and p.operation like '%INDEX%' and p.options like '%UNIQUE%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) u, ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.operation like '%INDEX%' and p.options like '%FULL%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) f where r.c1 = u.c1 and r.c1 = f.c1 ;
----------
awr_sql_object_avg_dy.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* format a30 format a15 format 99,999,999
col c1 heading Object Name col c2 heading Week Day col c3 heading Invocation Count
break on c1 skip 2 break on c2 skip 2 select decode(c2,1,'Monday',2,'Tuesday',3,'Wednesday',4,'Thursday',5,'Friday',6,'Satu rday',7,'Sunday') c2, c1, c3 from ( select p.object_name c1, to_char(sn.end_interval_time,'d') c2, count(1) c3 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by p.object_name, to_char(sn.end_interval_time,'d') order by c2,c1 ) ;
----------
usage_hr.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
col c1 heading Begin Interval time format a20 col c2 heading Search Columns format 999 col c3 heading Invocation Count format 99,999,999 break on c1 skip 2 accept idxname char prompt Enter Index Name: ttitle select Invocation Counts for index &idxname
to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, p.search_columns c2, count(*) c3 from dba_hist_snapshot sn, dba_hist_sql_plan p, dba_hist_sqlstat st where st.sql_id = p.sql_id and sn.snap_id = st.snap_id and p.object_name = &idxname' group by begin_interval_time,search_columns;
----------
awr_access_counts.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
ttile Table Access Operation Counts Per Snapshot Period col col col col c1 c2 c3 c4 heading heading heading heading Begin Interval time format a20 Operation format a15 Option format a15 Object Count format 999,999
break on c1 skip 2 break on c2 skip 2 select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, p.operation c2, p.options c3, count(1) c4 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24'), p.operation, p.options
order by 1,2,3;
----------
awr_sql_full_scans.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
col c1 heading Begin Interval Time format a20 col c2 heading Index Table Scans format 999,999 col c3 heading Full Table Scans format 999,999 select i.c1 c1, i.c2 c2, f.c2 c3 from ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.operation like '%TABLE ACCESS%' and p.options like '%INDEX%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) i, ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and
p.operation like '%TABLE ACCESS%' and p.options = 'FULL' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) f where i.c1 = f.c1 ;
----------
awr_full_table_scans.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
ttile Large Full-table scans Per Snapshot Period col c1 heading Begin Interval time col c4 heading FTS Count break on c1 skip 2 break on c2 skip 2 select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c4 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn, dba_segments o where p.object_owner <> 'SYS' and p.object_owner = o.owner and p.object_name = o.segment_name and o.blocks > 1000 and p.operation like '%TABLE ACCESS%' and p.options like '%FULL%' and p.sql_id = s.sql_id format a20 format 999,999
----------
awr_sql_access_hr.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
ttile Large Tabe Full-table scans Averages per Hour col c1 heading Day Hour col c2 heading FTS Count break on c1 skip 2 break on c2 skip 2 select to_char(sn.begin_interval_time,'hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn, dba_segments o where p.object_owner <> 'SYS' and p.object_owner = o.owner and p.object_name = o.segment_name and o.blocks > 1000 and p.operation like '%TABLE ACCESS%' and p.options like '%FULL%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'hh24') order by 1; format a20 format 999,999
----------
awr_sql_access_day.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
ttile Large Table Full-table scans Averages per Week Day col c1 heading Week Day col c2 heading FTS Count break on c1 skip 2 break on c2 skip 2 select to_char(sn.begin_interval_time,'day') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn, dba_segments o where p.object_owner <> 'SYS' and p.object_owner = o.owner and p.object_name = o.segment_name and o.blocks > 1000 and p.operation like '%TABLE ACCESS%' and p.options like '%FULL%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'day') order by 1; format a20 format 999,999
-------
awr_sql_scan_sums.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk.
-- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* col col col col c1 c2 c3 c4 heading heading heading heading Begin Large Small Total Interval Time format Table Full Table Scans format Table Full Table Scans format Index Scans format a20 999,999 999,999 999,999
select f.c1 c1, f.c2 c2, s.c2 c3, i.c2 c4 from ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn, dba_segments o where p.object_owner <> 'SYS' and p.object_owner = o.owner and p.object_name = o.segment_name and o.blocks > 1000 and p.operation like '%TABLE ACCESS%' and p.options like '%FULL%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) f, ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn, dba_segments o where p.object_owner <> 'SYS' and p.object_owner = o.owner and p.object_name = o.segment_name
and o.blocks < 1000 and p.operation like '%INDEX%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) s, ( select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.operation like '%INDEX%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'yy-mm-dd hh24') order by 1 ) i where f.c1 = s.c1 and f.c1 = i.c1 ;
----------
awr_sql_full_scans_avg_dy.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
format a20 col c1 heading Begin Interval Time col c2 heading Index Table Scans format 999,999 col c3 heading Full Table Scans format 999,999 select i.c1 c1, i.c2 c2, f.c2 c3
from ( select to_char(sn.begin_interval_time,'day') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.operation like '%TABLE ACCESS%' and p.options like '%INDEX%' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'day') order by 1 ) i, ( select to_char(sn.begin_interval_time,'day') c1, count(1) c2 from dba_hist_sql_plan p, dba_hist_sqlstat s, dba_hist_snapshot sn where p.object_owner <> 'SYS' and p.operation like '%TABLE ACCESS%' and p.options = 'FULL' and p.sql_id = s.sql_id and s.snap_id = sn.snap_id group by to_char(sn.begin_interval_time,'day') order by 1 ) f where i.c1 = f.c1 ;
--------
ash_hot_objects.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose,
-- contact [email protected] -- ************************************************* select o.owner, o.object_name, o.object_type, SUM(h.wait_time + h.time_waited) "total wait time" from v$active_session_history h, dba_objects o, v$event_name e where h.current_obj# = o.object_id and e.event_id = h.event_id and e.wait_class <> 'Idle' group by o.owner, o.object_name, o.object_type order by 4 DESC;
----------
sgasize.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* db_size_in_mb - db_caches db_buffers_in_mb, db_caches db_caches_mb, fixed_size_in_mb, lb_size_in_mb, sp_size_in_mb, lp_size_in_mb, jp_size_in_mb
select
from (select round (max(a.bytes) / 1024 / 1024, 2) db_size_in_mb from sys.v_$sgastat a where (a.name = 'db_block_buffers' or a.name = 'buffer_cache')), (select nvl(round (sum (b.value) / 1024 / 1024, 2),0) db_caches from sys.v_$parameter b where b.name like '%k_cache_size'), (select
round (sum (b.bytes) / 1024 / 1024, 2) fixed_size_in_mb from sys.v_$sgastat b where b.name = 'fixed_sga'), (select round (sum (c.bytes) / 1024 / 1024, 2) lb_size_in_mb from sys.v_$sgastat c where c.name= 'log_buffer' ), (select round (sum (d.value) / 1024 / 1024, 2) sp_size_in_mb from sys.v_$parameter d where d.name = 'shared_pool_size'), (select round (sum (e.value) / 1024 / 1024, 2) lp_size_in_mb from sys.v_$parameter e where e.name = 'large_pool_size' ), (select round (sum (f.value) / 1024 / 1024, 2) jp_size_in_mb from sys.v_$parameter f where f.name = 'java_pool_size');
----------
memsnap.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* buffer_hit_ratio, percent_shared_pool_free, lib_cache_hit_ratio, object_reloads, dd_cache_hit_ratio, redo_log_space_waits, redo_log_space_wait_time, mem_sort_ratio, parse_execute_ratio, buffer_busy_waits, latch_miss_ratio
select
(round ((sum (decode (name, 'physical reads', value, 0)) sum (decode (name, 'physical reads direct', value, 0)) sum (decode (name, 'physical reads direct (lob)', value, 0))) / (sum (decode (name, 'session logical reads', value, 1))),3)) buffer_hit_ratio from sys.v_$sysstat where name in ('session logical reads', 'physical reads direct (lob)', 'physical reads', 'physical reads direct')), (select round (100 * (free_bytes / shared_pool_size), 2) percent_shared_pool_free from (select sum (bytes) free_bytes from sys.v_$sgastat where name = 'free memory' and pool = 'shared pool'), (select value shared_pool_size from sys.v_$parameter where name = 'shared_pool_size')), (select 100 - round ((sum (reloads) / sum (pins)) * 100, 2) lib_cache_hit_ratio from sys.v_$librarycache), (select 100 - round ((sum (getmisses) / (sum (gets) + sum (getmisses)) * 100), 2) dd_cache_hit_ratio from sys.v_$rowcache), (select round ( (100 * b.value) / decode ((a.value + b.value), 0, 1, (a.value + b.value)), 2)mem_sort_ratio from v$sysstat a, v$sysstat b where a.name = 'sorts (disk)' and b.name = 'sorts (memory)'), (select round(100 * (sum (sys.v_$latch.misses) / sum (sys.v_$latch.gets)),2) latch_miss_ratio from sys.v_$latch), (select round (100 * (a.value - b.value) / decode (a.value, 0, 1, a.value), 2) parse_execute_ratio from sys.v_$sysstat a, sys.v_$sysstat b
where a.name = 'execute count' and b.name = 'parse count (hard)'), (select nvl(sum(total_waits),0) buffer_busy_waits from sys.v_$system_event a, sys.v_$event_name b where a.event = 'buffer busy waits' and a.event (+) = b.name), (select sum(reloads) object_reloads from sys.v_$librarycache), (select value redo_log_space_waits from sys.v_$sysstat where name = 'redo log space requests'), (select value redo_log_space_wait_time from sys.v_$sysstat where name = 'redo log space wait time');
----------
poolhit.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* name, 100 * (1 - (physical_reads / (db_block_gets + consistent_gets))) hit_ratio
select
-cacheadvice.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes
------
with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* size_for_estimate, buffers_for_estimate, estd_physical_read_factor, estd_physical_reads
select
from sys.v_$db_cache_advice where name = 'DEFAULT'and block_size = (select value from sys.v_$parameter where name = 'db_block_size') and advice_status = 'ON';
----------
cacheobjcnt.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* decode(cachehint, 0, 'default', 1, 'keep', 2, 'recycle', null) cache, count(*) objects
select
from sys.seg$ s where s.user# in (select user# from sys.user$ where name not in ('sys','system')) group by decode(cachehint, 0, 'default', 1, 'keep', 2, 'recycle', null) order by 1;
----------
buffutl.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* 'free' buffer_state, nvl(sum(blocksize) / 1024 ,0) amt_kb
select from sys.x$bh a, sys.ts$ b where state = 0 and a.ts# = b.ts# union all select 'read/mod' buffer_state, nvl(sum(blocksize) / 1024 ,0) amt_kb from sys.x$bh a, sys.ts$ b where state = 1 and a.ts# = b.ts# union all select 'read/notmod', nvl(sum(blocksize) / 1024 ,0) amt_kb from sys.x$bh a, sys.ts$ b where state = 2 and a.ts# = b.ts# union all select 'being read' buffer_state, nvl(sum(blocksize) / 1024 ,0) amt_kb from sys.x$bh a, sys.ts$ b where state = 3 and a.ts# = b.ts# order by 1;
--
libdet.sql
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* namespace, gets, round(gethitratio*100,2) gethitratio, pins, round(pinhitratio*100,2) pinhitratio, reloads, invalidations
select
----------
libwait.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* b.name, nvl(max(a.total_waits),0)
select from sys.v_$system_event a, sys.v_$event_name b where a.event (+) = b.name and b.name in ('latch free','library cache load lock', 'library cache lock','library cache pin') group by b.name
--------
libobj.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose,
-- contact [email protected] -- ************************************************* select owner, name, type, sharable_mem, loads, executions, locks, pins, kept from sys.v_$db_object_cache order by type asc;
----------
dictdet.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* parameter, usage, gets, getmisses, 100 - round((getmisses/ (gets + getmisses) * 100),2) hit_ratio
select
----------
shared_pool.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
max(b.value)/(1024*1024) shared_pool_size XE "shared_pool_size" , max(b.value)/(1024*1024))-((sum(a.bytes)/(1024*1024)) shared_pool_avail, (sum(a.bytes)/max(b.value))*100 shared_pool_pct from v$sgastat a, v$parameter b where a.pool = shared pool and a.name != free memory and b.name='shared_pool_size XE "shared_pool_size" ';
----------
sql_summary.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
create or replace view sql_summary as select username, sharable_mem, persistent_mem, runtime_mem from sys.v_$sqlarea a, dba_users b where a.parsing_user_id = b.user_id;
----------
sqlsum.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* areas sharable persistent runtime username format format format format 999,999,999 999,999,999 999,999,999 a15 heading heading heading heading heading Used Areas Shared Bytes Persistent Bytes Runtime Bytes "User"
column mem_sum
format 999,999,999
ttitle "Users SQL Area Memory Use" spool sqlsum set pages 59 lines 80 break on report compute compute compute compute sum sum sum sum of of of of sharable on report persistent on report runtime on report mem_sum on report
select username, sum(sharable_mem) Sharable, sum( persistent_mem) Persistent, sum( runtime_mem) Runtime , count(*) Areas, sum(sharable_mem+persistent_mem+runtime_mem) Mem_sum from sql_summary group by username order by 2; spool off pause Press enter to continue clear columns clear breaks set pages 22 lines 80 ttitle off
-sqlmem.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* column sql_text format a60 heading Text word_wrapped column sharable_mem heading Shared Bytes column persistent_mem heading Persistent Bytes column loads heading Loads column users format a15 heading "User" column executions heading "Executions" column users_executing heading "Used By" ttitle "Users SQL Area Memory Use" spool sqlmem set long 2000 pages 59 lines 132 break on users compute sum of sharable_mem on users compute sum of persistent_mem on users compute sum of runtime_mem on users
select username users, sql_text, Executions, loads, users_executing, sharable_mem, persistent_mem from sys.v_$sqlarea a, dba_users b where a.parsing_user_id = b.user_id and b.username like upper('%&user_name%') order by 3 desc,1; spool off pause Press enter to continue clear columns clear computes clear breaks set pages 22 lines 80
----------
sql_garbage.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
REM View to sort SQL into GOOD and GARBAGE REM CREATE OR REPLACE VIEW sql_garbage AS SELECT b.username users, SUM(a.sharable_mem+a.persistent_mem) Garbage, TO_NUMBER(null) good FROM sys.v_$sqlarea a, dba_users b WHERE (a.parsing_user_id = b.user_id and a.executions<=1) GROUP BY b.username UNION SELECT DISTINCT b.username users, TO_NUMBER(null) garbage, SUM(c.sharable_mem+c.persistent_mem) Good FROM dba_users b, sys.v_$sqlarea c WHERE (b.user_id = c.parsing_user_id and c.executions>1) GROUP BY b.username; column garbage format a14 heading 'Non-Shared SQL' column good format a14 heading 'Shared SQL' column good_percent format a14 heading 'Percent Shared' column users format a14 heading users column nopr noprint set feedback off ttitle 'Shared Pool Utilization' spool sql_garbage select 1 nopr, a.users users, to_char(a.garbage,'9,999,999,999') garbage, to_char(b.good,'9,999,999,999') good, to_char((b.good/(b.good+a.garbage))*100,'9,999,999.999') good_percent from sql_garbage a, sql_garbage b
where a.users=b.users and a.garbage is not null and b.good is not null union select 2 nopr, '-------------' users, '--------------' garbage, '--------------' good, '--------------' good_percent from dual union select 3 nopr, to_char(count(a.users)) users, to_char(sum(a.garbage),'9,999,999,999') garbage, to_char(sum(b.good),'9,999,999,999') good, to_char(((sum(b.good)/(sum(b.good)+sum(a.garbage)))*100), '9,999,999.999') good_percent from sql_garbage a, sql_garbage b where a.users=b.users and a.garbage is not null and b.good is not null order by 1,3 desc / spool off
----------
similar_sql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
set lines 140 pages 55 verify off feedback off col num_of_times heading 'Number Of Repeats' col SQL heading 'SubString width - &&chars Characters' col username format a15 heading 'User' ttitle 'Similar SQL' spool similar_sql&&chars select b.username,substr(a.sql_text,1,&&chars) SQL, count(a.sql_text) num_of_tim es from v$sqlarea a, dba_users b where a.parsing_user_id=b.user_id group by b.username,substr(a.sql_text,1,&&chars) having count(a.sql_text)>&&num_ repeats order by count(a.sql_text) desc / spool off undef chars undef num_repeats clear columns set lines 80 pages 22 verify on feedback on ttitle off
--
Flush_it_proc.sql
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
CREATE OR REPLACE PROCEDURE flush_it( p_free IN NUMBER, num_runs IN NUMBER) IS -CURSOR get_share IS SELECT LEAST(MAX(b.value)/(1024*1024),SUM(a.bytes)/(1024*1024)) FROM v$sgastat a, v$parameter b WHERE (a.pool='shared pool' AND a.name <> ('free memory')) AND b.name = 'shared_pool_size'; -CURSOR get_var IS SELECT value/(1024*1024) FROM v$parameter WHERE name = 'shared_pool_size'; -CURSOR get_time IS SELECT sysdate FROM dual; --- Following cursors from Steve Adams Nice_flush -CURSOR reused_cursors IS SELECT address ',' hash_value FROM sys.v_$sqlarea WHERE executions > num_runs; cursor_string varchar2(30); -CURSOR cached_sequences IS SELECT sequence_owner, sequence_name FROM sys.dba_sequences WHERE cache_size > 0; sequence_owner varchar2(30); sequence_name varchar2(30); -CURSOR candidate_objects IS SELECT kglnaobj, decode(kglobtyp, 6, 'Q', 'P') FROM sys.x_$kglob WHERE inst_id = userenv('Instance') AND kglnaown = 'SYS' AND kglobtyp in (6, 7, 8, 9); object_name varchar2(128); object_type char(1); --- end of Steve Adams Cursors -todays_date DATE; mem_ratio NUMBER; share_mem NUMBER; variable_mem NUMBER; cur INTEGER; sql_com VARCHAR2(60); row_proc NUMBER;
-BEGIN OPEN get_share; OPEN get_var; FETCH get_share INTO share_mem; FETCH get_var INTO variable_mem; mem_ratio:=share_mem/variable_mem; IF mem_ratio>p_free/100 THEN --- Following keep sections from Steve Adams nice_flush -BEGIN OPEN reused_cursors; LOOP FETCH reused_cursors INTO cursor_string; EXIT WHEN reused_cursors%notfound; sys.dbms_shared_pool.keep(cursor_string, 'C'); END LOOP; END; BEGIN OPEN cached_sequences; LOOP FETCH cached_sequences INTO sequence_owner, sequence_name; EXIT WHEN cached_sequences%notfound; sys.dbms_shared_pool.keep(sequence_owner '.' sequence_name, 'Q'); END LOOP; END; BEGIN OPEN candidate_objects; LOOP FETCH candidate_objects INTO object_name, object_type; EXIT WHEN candidate_objects%notfound; sys.dbms_shared_pool.keep('SYS.' object_name, object_type); END LOOP; END; --- end of Steve Adams section -cur:=DBMS_SQL.OPEN_CURSOR; sql_com:='ALTER SYSTEM FLUSH SHARED_POOL'; DBMS_SQL.PARSE(cur,sql_com,dbms_sql.v7); row_proc:=DBMS_SQL.EXECUTE(cur); DBMS_SQL.CLOSE_CURSOR(cur); OPEN get_time; FETCH get_time INTO todays_date; INSERT INTO dba_running_stats VALUES ( 'Flush of Shared Pool',1,35,todays_date,0 ); COMMIT; END IF; END flush_it;
--
Gen_keep.sql
-- *************************************************
--------
Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
set lines 132 feedback off verify off set pages 0 spool keep_them.sql select 'execute dbms_shared_pool.keep(' chr(39) OWNER '.' name chr(39) ', ' chr(39) decode(type,'PACKAGE','P','PROCEDURE','P','FUNCTION','P','SEQUENCE','Q', 'TRIGGER','R') chr(39) ')' from v$db_object_cache where type not in ('NOT LOADED','NON-EXISTENT','VIEW','TABLE', 'INVALID TYPE','CURSOR','PACKAGE BODY') and executions>loads and executions>1 and kept='NO' order by owner,namespace,type,executions desc / spool off
----------
keep_them.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* dbms_shared_pool.keep('APPS.WF_PARAMETER_T','') dbms_shared_pool.keep('APPS.WF_EVENT_T','') dbms_shared_pool.keep('APPS.WF_AGENT_T','') dbms_shared_pool.keep('APPS.BOSS_GET_EMP_NAME','P') dbms_shared_pool.keep('APPS.BEN_PEN_BUS','P') dbms_shared_pool.keep('APPS.PAY_ELE_SHD','P') dbms_shared_pool.keep('APPS.PSB_HR_POPULATE_DATA_PVT','P') dbms_shared_pool.keep('APPS.BEN_ENROLLMENT_ACTION_ITEMS','P') dbms_shared_pool.keep('APPS.FND_REQUEST_SET','P') dbms_shared_pool.keep('APPS.BOSS_RECEIPT','P') dbms_shared_pool.keep('APPS.BEN_ELIG_DPNT_WHO','R') dbms_shared_pool.keep('APPS.BEN_ELIG_PER_ELCTBL_CHC_WHO','R') dbms_shared_pool.keep('APPS.BEN_ELIG_PER_OPT_F_WHO','R') dbms_shared_pool.keep('APPS.GHR_PAY_ELEMENT_ENTVAL_F_AFIUD','R') dbms_shared_pool.keep('APPS.BEN_ENRT_RT_WHO','R') dbms_shared_pool.keep('APPS.BEN_ELIG_PER_F_WHO','R')
execute execute execute execute execute execute execute execute execute execute execute execute execute execute execute execute
----------
ddcache.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
ttitle "DD Cache Hit Ratio" spool ddcache SELECT (SUM(getmisses)/SUM(gets))*100 RATIO FROM v$rowcache; spool off pause Press enter to continue ttitle off
----------
bufobjwaits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* owner, object_name, object_type, value waits
select
from sys.v_$segment_statistics where (statistic_name = 'buffer busy waits' and value > 0) order by 1,2;
-------
libcachhist.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk.
-- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select to_char(end_time, 'YYYY-MON-DD HH:MI:SS') end_time, value, metric_unit from sys.v_$sysmetric_history where metric_name = 'Library Cache Hit Ratio' order by 1
----------
lib_cache_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select b.namespace "Name Space" , e.gets - b.gets "Get Requests" , to_number(decode(e.gets,b.gets,null, 100 - (e.gethits - b.gethits) * 100/(e.gets - b.gets))) "Get Pct Miss" , e.pins - b.pins "Pin Requests" , to_number(decode(e.pins,b.pins,null, 100 - (e.pinhits - b.pinhits) * 100/(e.pins - b.pins))) "Pin Pct Miss" , e.reloads - b.reloads "Reloads" , e.invalidations - b.invalidations "Invalidations" from dba_hist_librarycache b , dba_hist_librarycache e where b.snap_id = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid = &pDbId and e.dbid = &pDbId and b.dbid = e.dbid and b.instance_number = &pInstNum and e.instance_number = &pInstNum and b.instance_number = e.instance_number and b.namespace = e.namespace
-----
rowcache_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk.
--- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select param "Parameter", gets "Get Requests", getm "Pct Miss", scans "Scan Requests", scanm "Pct Miss", mods "Mod Req", usage "Final Usage" From (select lower(b.parameter) param , e.gets - b.gets gets , to_number(decode(e.gets,b.gets,null, (e.getmisses - b.getmisses) * 100/(e.gets - b.gets))) getm , e.scans - b.scans scans , to_number(decode(e.scans,b.scans,null, (e.scanmisses - b.scanmisses) * 100/(e.scans - b.scans))) scanm , e.modifications - b.modifications mods , e.usage usage from dba_hist_rowcache_summary b , dba_hist_rowcache_summary e where b.snap_id = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid = &pDbId and e.dbid = &pDbId and b.dbid = e.dbid and b.instance_number = &pInstNum and e.instance_number = &pInstNum and b.instance_number = e.instance_number and b.parameter = e.parameter and e.gets - b.gets > 0 ) order by param;
----------
Buf_pool_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select name , numbufs "Number of Buffers" , buffs "Buffer Gets" , conget "Consistent Gets" , phread "Physical Reads" , phwrite "Physical Writes" , fbwait "Free Buffer Waits" , bbwait "Buffer Busy Waits"
, wcwait "Write Complete Waits" , poolhr "Pool Hit %" From (select e.name , e.set_msize numbufs , decode( e.db_block_gets - nvl(b.db_block_gets,0) + e.consistent_gets - nvl(b.consistent_gets,0) , 0, to_number(null) , (100* (1 - ( (e.physical_reads - nvl(b.physical_reads,0)) / ( e.db_block_gets - nvl(b.db_block_gets,0) + e.consistent_gets - nvl(b.consistent_gets,0)) ) ) ) ) poolhr , e.db_block_gets - nvl(b.db_block_gets,0) + e.consistent_gets - nvl(b.consistent_gets,0) buffs , e.consistent_gets - nvl(b.consistent_gets,0) conget , e.physical_reads - nvl(b.physical_reads,0) phread , e.physical_writes - nvl(b.physical_writes,0) phwrite , e.free_buffer_wait - nvl(b.free_buffer_wait,0) fbwait , e.write_complete_wait - nvl(b.write_complete_wait,0) wcwait , e.buffer_busy_wait - nvl(b.buffer_busy_wait,0) bbwait from dba_hist_buffer_pool_stat b , dba_hist_buffer_pool_stat e where b.snap_id(+) = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid(+) = &pDbId and e.dbid = &pDbId and b.dbid(+) = e.dbid and b.instance_number(+) = &pInst_Num and e.instance_number = &pInst_Num and b.instance_number(+) = e.instance_number and b.id(+) = e.id) order by 1
----------
rpt_10g_lib_miss.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
set lines 80; set pages 999; column column column column mydate heading 'Yr. Mo Dy Hr.' format a16 c1 heading "execs" format 9,999,999 c2 heading "Cache Misses While Executing" format 9,999,999 c3 heading "Library Cache Miss Ratio" format 999.99999
select to_char(sn.end_interval_time,'yyyy-mm-dd HH24') mydate, sum(new.pins-old.pins) c1, sum(new.reloads-old.reloads) c2, sum(new.reloads-old.reloads)/ sum(new.pins-old.pins) library_cache_miss_ratio from dba_hist_librarycache old, dba_hist_librarycache new, dba_hist_snapshot sn where new.snap_id = sn.snap_id and old.snap_id = new.snap_id-1 and old.namespace = new.namespace group by to_char(sn.end_interval_time,'yyyy-mm-dd HH24') ;
----------
rpt_bhr_awr_hr.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
set pages 999; column bhr format 9.99 column mydate heading 'yr. mo dy Hr.' select to_char(snap_time,'HH24') mydate, avg( (((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets))(new.physical_reads-old.physical_reads)) / ((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets)) ) bhr from dba_hist_buffer_pool_stat old, dba_hist_buffer_pool_stat new, dba_hist_sga sn where new.name in ('DEFAULT','FAKE VIEW') and new.name = old.name and new.snap_id = sn.snap_id
and old.snap_id = sn.snap_id-1 and new.consistent_gets > 0 and old.consistent_gets > 0 having avg( (((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets))(new.physical_reads-old.physical_reads)) / ((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets)) ) < 1 group by to_char(snap_time,'HH24') ;
---------
rpt_bhr_awr_dy.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
set pages 999; column bhr format 9.99 column mydate heading 'yr. mo dy Hr.' select to_char(end_interval_time,'day') mydate, avg( (((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets))(new.physical_reads-old.physical_reads)) / ((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets)) ) bhr from dba_hist_buffer_pool_stat old, dba_hist_buffer_pool_stat new, dba_hist_snapshot sn where new.name in ('DEFAULT','FAKE VIEW') and new.name = old.name and new.snap_id = sn.snap_id and
old.snap_id = sn.snap_id-1 and new.consistent_gets > 0 and old.consistent_gets > 0 having avg( (((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets))(new.physical_reads-old.physical_reads)) / ((new.consistent_gets-old.consistent_gets)+ (new.db_block_gets-old.db_block_gets)) ) < 1 group by to_char(end_interval_time,'day') ;
----------
get_keep_pool_awr.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select 'alter table ' p.owner '.' p.name ' storage (buffer_pool keep);' from dba_tables t, dba_segments s, dba_hist_sqlstat a, (select distinct pl.sql_id, pl.object_owner owner, pl.object_name name from dba_hist_sql_plan pl where pl.operation = 'TABLE ACCESS' and pl.options = 'FULL') p where a.sql_id = p.sql_id and t.owner = s.owner and t.table_name = s.segment_name and t.table_name = p.name and t.owner = p.owner and t.owner not in ('SYS','SYSTEM')
and t.buffer_pool <> 'KEEP' having s.blocks < 50 group by p.owner, p.name, t.num_rows, s.blocks UNION -- *********************************************************** -- Next, get the index names -- *********************************************************** select 'alter index ' owner '.' index_name ' storage (buffer_pool keep);' from dba_indexes where owner '.' table_name in ( select p.owner '.' p.name from dba_tables t, dba_segments s, dba_hist_sqlstata, (select distinct pl.sql_id, pl.object_owner owner, pl.object_name name from dba_hist_sql_plan pl where pl.operation = 'TABLE ACCESS' and pl.options = 'FULL') p where a.sql_id = p.sql_id and t.owner = s.owner and t.table_name = s.segment_name and t.table_name = p.name and t.owner = p.owner and t.owner not in ('SYS','SYSTEM') and t.buffer_pool <> 'KEEP' having s.blocks < 50 group by p.owner, p.name, t.num_rows, s.blocks )
----------
userscans.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* sid, username, total_user_scans, round(100 * total_user_scans/total_scans,2) pct_scans
select
from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_scans from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name = 'table scans (long tables)' group by b.sid, nvl(b.username,p.name) order by 3 desc), (select sum(value) total_scans from sys.v_$statname c, sys.v_$sesstat a where a.statistic#=c.statistic# and c.name = 'table scans (long tables)');
-scatwait.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select
b.sid, nvl(b.username,c.name) username, b.machine, a.total_waits, round((a.time_waited / 100),2) time_wait_sec,a.total_timeouts, round((average_wait / 100),2) average_wait_sec, round((a.max_wait / 100),2) max_wait_sec from sys.v_$session_event a, sys.v_$session b, sys.v_$bgprocess c where event = 'db file scattered read' and a.sid = b.sid and c.paddr (+) = b.paddr order by 3 desc, 1 asc;
----------
9ilarge_scanusers.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* c.username username, count(a.hash_value) scan_count
select from sys.v_$sql_plan a, sys.dba_segments b, sys.dba_users c, sys.v_$sql d where a.object_owner (+) = b.owner and a.object_name (+) = b.segment_name and b.segment_type in ('TABLE', 'TABLE PARTITIOn') and a.operation like '%TABLE%' and a.options = 'FULL' and c.user_id = d.parsing_user_id and d.hash_value = a.hash_value and b.bytes / 1024 > 1024 group by c.username order by 2 desc;
----------
curriosql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* sid, username, sql_text
select
from sys.v_$sqltext a, sys.v_$session b where b.sql_address = a.address and b.sid = (select sid from (select b.sid sid, nvl(b.username,p.name) username, sum(value) total_user_io from sys.v_$statname c, sys.v_$sesstat a, sys.v_$session b, sys.v_$bgprocess p where a.statistic#=c.statistic# and p.paddr (+) = b.paddr and b.sid=a.sid and c.name in ('physical reads','physical writes', 'physical reads direct', 'physical reads direct (lob)', 'physical writes direct', 'physical writes direct (lob)') group by b.sid, nvl(b.username,p.name) order by 3 desc) where rownum < 2) order by a.piece;
--
cartsession.sql
---------
************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* username, count(distinct c.hash_value) nbr_stmts
select from sys.v_$sql a, sys.dba_users b, sys.v_$sql_plan c where a.parsing_user_id = b.user_id and options = 'cartesian' and operation like '%join%' and a.hash_value = c.hash_value group by username order by 2 desc;
----------
cartsql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* *
select from sys.v_$sql where hash_value in (select hash_value from sys.v_$sql_plan where options = 'CARTESIAN' and operation LIKE '%JOIN%' ) order by hash_value;
----------
top9isql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* sql_text , username , disk_reads_per_exec, buffer_gets_per_exec, buffer_gets , disk_reads, parse_calls , sorts , executions , loads, rows_processed , hit_ratio, first_load_time , sharable_mem , persistent_mem , runtime_mem, cpu_time_secs, cpu_time_secs_per_execute, elapsed_time_secs, elapsed_time_secs_per_execute, address, hash_value
select
from (select sql_text , b.username , round((a.disk_reads/ decode(a.executions,0,1,a.executions)),2) disk_reads_per_exec, a.disk_reads , a.buffer_gets , round((a.buffer_gets/ decode(a.executions,0,1,a.executions)),2) buffer_gets_per_exec, a.parse_calls , a.sorts , a.executions , a.loads, a.rows_processed , 100 - round(100 * a.disk_reads/ greatest(a.buffer_gets,1),2) hit_ratio, a.first_load_time , sharable_mem , persistent_mem , runtime_mem, round(cpu_time / 1000000,3) cpu_time_secs, round((cpu_time / 1000000)/ decode(a.executions,0,1,a.executions),3)
cpu_time_secs_per_execute, round(elapsed_time / 1000000,3) elapsed_time_secs, round((elapsed_time / 1000000)/decode(a.executions,0,1,a.executions),3) elapsed_time_secs_per_execute, address, hash_value from sys.v_$sqlarea a, sys.all_users b where a.parsing_user_id=b.user_id and b.username not in ('SYS','SYSTEM') order by 3 desc) where rownum < 21;
----------
fullsql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select sql_text from sys.v_$sqltext where hash_value = <enter hash value for sql statement> order by piece;
----------
9icartcount.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* count(distinct hash_value) cartesian_statements, count(*) total_cartesian_joins
select
----------
9icartsql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* *
select from sys.v_$sql where hash_value in (select hash_value from sys.v_$sql_plan where options = 'CARTESIAN' AND operation LIKE '%JOIN%' ) order by hash_value;
----------
9itabscan.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* sql_text, total_large_scans, executions, executions * total_large_scans sum_large_scans
select
count(*) total_large_scans, executions from sys.v_$sql_plan a, sys.dba_segments b, sys.v_$sql c where a.object_owner (+) = b.owner a.object_name (+) = b.segment_name b.segment_type in ('TABLE', 'TABLE PARTITION') a.operation like '%TABLE%' a.options = 'FULL' c.hash_value = a.hash_value b.bytes / 1024 > 1024 by sql_text, executions) order by 4 desc; and and and and and and group
----------
9iplanstats.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* operation, options, object_owner, object_name, executions, last_output_rows, last_cr_buffer_gets, last_cu_buffer_gets, last_disk_reads, last_disk_writes, last_elapsed_time
select
from sys.v_$sql_plan a, sys.v_$sql_plan_statistics b where a.hash_value = b.hash_value and a.id = b.operation_id and a.hash_value = <enter hash value> order by a.id;
----------
plan9i.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
set echo off; set feedback on set pages 999; column nbr_FTS column num_rows column blocks column owner column name column ch format format format format format format 999,999 999,999,999 999,999 a14; a24; a1;
column object_owner heading "Owner" format a12; column ct heading "# of SQL selects" format 999,999; select object_owner, count(*) ct from v$sql_plan where object_owner is not null group by object_owner order by ct desc ; --spool access.lst; set heading off; set feedback off; set heading on; set feedback on; ttitle 'full table scans and counts The "K" indicates that the table is in th e KEEP Pool (Oracle8).' select p.owner, p.name, t.num_rows, -- ltrim(t.cache) ch, decode(t.buffer_pool,'KEEP','Y','DEFAULT','N') K, s.blocks blocks, sum(a.executions) nbr_FTS from dba_tables t, dba_segments s, v$sqlarea a, (select distinct
address, object_owner owner, object_name name from v$sql_plan where operation = 'TABLE ACCESS' and options = 'FULL') p where a.address = p.address and t.owner = s.owner and t.table_name = s.segment_name and t.table_name = p.name and t.owner = p.owner and t.owner not in ('SYS','SYSTEM') having sum(a.executions) > 9 group by p.owner, p.name, t.num_rows, t.cache, t.buffer_pool, s.blocks order by sum(a.executions) desc; column column column column nbr_RID num_rows owner name format format format format 999,999,999 999,999,999 a15; a25;
ttitle 'Table access by ROWID and counts' select p.owner, p.name, t.num_rows, sum(s.executions) nbr_RID from dba_tables t, v$sqlarea s, (select distinct address, object_owner owner, object_name name from v$sql_plan where operation = 'TABLE ACCESS' and options = 'BY ROWID') p where s.address = p.address and t.table_name = p.name and t.owner = p.owner having sum(s.executions) > 9
group by p.owner, p.name, t.num_rows order by sum(s.executions) desc; --************************************************* -- Index Report Section --************************************************* column column column column column column nbr_scans num_rows tbl_blocks owner table_name index_name format format format format format format 999,999,999 999,999,999 999,999,999 a9; a20; a20;
ttitle 'Index full scans and counts' select p.owner, d.table_name, p.name index_name, seg.blocks tbl_blocks, sum(s.executions) nbr_scans from dba_segments seg, v$sqlarea s, dba_indexes d, (select distinct address, object_owner owner, object_name name from v$sql_plan where operation = 'INDEX' and options = 'FULL SCAN') p where d.index_name = p.name and s.address = p.address and d.table_name = seg.segment_name and seg.owner = p.owner having sum(s.executions) > 9 group by p.owner, d.table_name, p.name, seg.blocks order by sum(s.executions) desc; ttitle 'Index range scans and counts' select p.owner, d.table_name, p.name index_name, seg.blocks tbl_blocks, sum(s.executions) nbr_scans
from dba_segments seg, v$sqlarea s, dba_indexes d, (select distinct address, object_owner owner, object_name name from v$sql_plan where operation = 'INDEX' and options = 'RANGE SCAN') p where d.index_name = p.name and s.address = p.address and d.table_name = seg.segment_name and seg.owner = p.owner having sum(s.executions) > 9 group by p.owner, d.table_name, p.name, seg.blocks order by sum(s.executions) desc; ttitle 'Index unique scans and counts' select p.owner, d.table_name, p.name index_name, sum(s.executions) nbr_scans from v$sqlarea s, dba_indexes d, (select distinct address, object_owner owner, object_name name from v$sql_plan where operation = 'INDEX' and options = 'UNIQUE SCAN') p where d.index_name = p.name and s.address = p.address having sum(s.executions) > 9 group by p.owner, d.table_name, p.name order by sum(s.executions) desc;
----------
9iexpl.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* lpad(' ',level-1) operation ' ' options ' ' object_name "Plan", cost, cardinality, bytes, io_cost, cpu_cost from sys.v_$sql_plan connect by prior id = parent_id and prior hash_value = hash_value start with id = 0 and hash_value = <enter hash value> order by id;
select
----------
9iltabscan.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select table_owner, table_name, table_type, size_kb, statement_count, reference_count, executions, executions * reference_count total_scans from (select a.object_owner table_owner,
a.object_name table_name, b.segment_type table_type, b.bytes / 1024 size_kb, sum(c.executions ) executions, count( distinct a.hash_value ) statement_count, count( * ) reference_count from sys.v_$sql_plan a, sys.dba_segments b, sys.v_$sql c where a.object_owner (+) = b.owner and a.object_name (+) = b.segment_name and b.segment_type in ('TABLE', 'TABLE PARTITION') and a.operation like '%TABLE%' and a.options = 'FULL' and a.hash_value = c.hash_value and b.bytes / 1024 > 1024 group by a.object_owner, a.object_name, a.operation, b.bytes / 1024, b.segment_type order by 4 desc, 1, 2 );
----------
9iunused_indx.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select distinct a.object_owner table_owner, a.object_name table_name, b.segment_type table_type, b.bytes / 1024 size_kb, d.index_name from sys.v_$sql_plan a, sys.dba_segments b, sys.dba_indexes d where a.object_owner (+) = b.owner and a.object_name (+) = b.segment_name and b.segment_type in ('TABLE', 'TABLE PARTITION') and a.operation like '%TABLE%' and a.options = 'FULL' and b.bytes / 1024 > 1024 and b.segment_name = d.table_name and b.owner = d.table_owner order by 1, 2;
-high_sql_buf_gets.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes -- with no warranties. Use at your own risk. --- To license this script for a commercial purpose, -- contact [email protected] -- ************************************************* select sql_id , buffer_gets_total "Buffer Gets" , executions_total "Executions" , buffer_gets_total/executions_total "Gets / Exec" , pct*100 "% Total" , cpu_time_total/1000000 "CPU Time (s)" , elapsed_time_total/1000000 "Elapsed Time (s)" , module "SQL Module" , stmt "SQL Statement" from (select e.sql_id sql_id , e.buffer_gets_total - nvl(b.buffer_gets_total,0) buffer_gets_tot al , e.executions_total - nvl(b.executions_total,0) executions_total , (e.buffer_gets_total - nvl(b.buffer_gets_total,0))/ ( select e1.value - nvl(b1.value,0) from dba_hist_sysstat b1 , dba_hist_sysstat e1 where b1.snap_id(+) = b.snap_id and e1.snap_id = e.snap_id and b1.dbid(+) = b.dbid and e1.dbid = e.dbid and b1.instance_number(+) = b.instance_number and e1.instance_number = e.instance_number and b1.stat_id = e1.stat_id and e1.stat_name = 'session logical reads' ) pct , e.elapsed_time_total - nvl(b.elapsed_time_total,0) elapsed_time_ total , e.cpu_time_total - nvl(b.cpu_time_total,0) cpu_time_total , e.module , t.sql_text stmt from dba_hist_sqlstat e , dba_hist_sqlstat b , dba_hist_sqltext t where b.snap_id(+) = @pBgnSnap and b.dbid(+) = e.dbid and b.instance_number(+) = e.instance_number and b.sql_id(+) = e.sql_id and e.snap_id = &pEndSnap and e.dbid = &pDBId and e.instance_number = &pInstNum and (e.executions_total - nvl(b.executions_total,0)) > 0 and t.sql_id = b.sql_id )
order by 2 desc
----------
top_sql_waits.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select ash.user_id, u.username, sqla.sql_text, sum(ash.wait_time + ash.time_waited) wait_time from v$active_session_history ash, v$sqlarea sqla, dba_users u where ash.sample_time > sysdate-1 and ash.sql_id = sqla.sql_id and ash.user_id = u.user_id group by ash.user_id, sqla.sql_text, u.username order by 4;
----------
obj_wait_ash.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select obj.object_name, obj.object_type, ash.event, sum(ash.wait_time + ash.time_waited) wait_time from v$active_session_history ash,
dba_objects obj where ash.sample_time > sysdate -1 and ash.current_obj# = obj.object_id group by obj.object_name, obj.object_type, ash.event order by 4 desc;
----------
awr_high_scan_sql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select c.username username, count(a.hash_value) scan_count from sys.v_$sql_plan a, sys.dba_segments b, sys.dba_users c, sys.v_$sql d where a.object_owner (+) = b.owner and a.object_name (+) = b.segment_name and b.segment_type IN ('TABLE', 'TABLE PARTITION') and a.operation like '%TABLE%' and a.options = 'FULL' and c.user_id = d.parsing_user_id and d.hash_value = a.hash_value and b.bytes / 1024 > 1024 group by c.username order by 2 desc ;
----------
awr_high_resource_sql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select sql_text, username, disk_reads_per_exec, buffer_gets, disk_reads, parse_calls, sorts, executions, rows_processed, hit_ratio, first_load_time, sharable_mem, persistent_mem, runtime_mem, cpu_time, elapsed_time, address, hash_value from (select sql_text , b.username , round((a.disk_reads/decode(a.executions,0,1, a.executions)),2) disk_reads_per_exec, a.disk_reads , a.buffer_gets , a.parse_calls , a.sorts , a.executions , a.rows_processed , 100 - round(100 * a.disk_reads/greatest(a.buffer_gets,1),2) hit_ratio, a.first_load_time , sharable_mem , persistent_mem , runtime_mem, cpu_time, elapsed_time, address, hash_value from sys.v_$sqlarea a, sys.all_users b where a.parsing_user_id=b.user_id and b.username not in ('sys','system') order by 3 desc)
----------
awr_cartesian_sum.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select count(distinct hash_value) carteisan_statements, count(*) total_cartesian_joins from sys.v_$sql_plan where options = 'CARTESIAN' and operation like '%JOIN%'
----------
awr_sql_cartesian.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select * from sys.v_$sql where hash_value in (select hash_value from sys.v_$sql_plan where options = 'CARTESIAN' and operation LIKE '%JOIN%' ) order by hash_value;
----------
awr_large_scan_count.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select sql_text, total_large_scans, executions, executions * total_large_scans sum_large_scans from (select sql_text, count(*) total_large_scans, executions from sys.v_$sql_plan a, sys.dba_segments b, sys.v_$sql c where a.object_owner (+) = b.owner and a.object_name (+) = b.segment_name and b.segment_type IN ('TABLE', 'TABLE PARTITION') and a.operation LIKE '%TABLE%' and a.options = 'FULL' and c.hash_value = a.hash_value and b.bytes / 1024 > 1024 group by sql_text, executions) order by 4 desc ;
--------
awr_sqlstat_deltas.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose,
-- contact [email protected] -- ************************************************* col col col col col col col col c1 c2 c3 c4 c5 c6 c7 c8 heading heading heading heading heading heading heading heading Begin Interval time SQL ID Exec Delta Buffer Gets Delta Disk Reads Delta IO Wait Delta Application Wait Delta Concurrency Wait Delta format format format format format format format format a8 a13 9,999 9,999 9,999 9,999 9,999 9,999
break on c1 select to_char(s.begin_interval_time, mm-dd hh24 ) c1, sql.sql_id c2, sql.executions_delta c3, sql.buffer_gets_delta c4, sql.disk_reads_delta c5, sql.iowait_delta c6, sql.apwait_delta c7, sql.ccwait_delta c8 from dba_hist_sqlstat sql, dba_hist_snapshot s where s.snap_id = sql.snap_id order by c1, c2 ;
----------
awr_sqlstat_deltas_detail.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* c1 c2 c3 c4 c5 c6 c7 c8 c9 heading heading heading heading heading heading heading heading heading Begin Interval time Exec Delta Buffer Gets Delta Disk Reads Delta IO Wait Delta App Wait Delta Cncr Wait Delta CPU Time Delta Elpsd Time Delta format format format format format format format format format a8 999,999 999,999 9,999 9,999 9,999 9,999 999,999 999,999
ttitle
break on c1 select to_char(s.begin_interval_time, mm-dd hh24 ) c1, sql.executions_delta c2, sql.buffer_gets_delta c3, sql.disk_reads_delta c4, sql.iowait_delta c5, sql.apwait_delta c6, sql.ccwait_delta c7, sql.cpu_time_delta c8, sql.elapsed_time_delta c9 from dba_hist_sqlstat sql, dba_hist_snapshot s where s.snap_id = sql.snap_id and sql_id = &sqlid order by c1 ;
----------
awr_high_cost_sql.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* format a13 format 9,999,999 format a200
col c1 heading SQL ID col c2 heading Cost col c3 heading SQL Text select p.sql_id c1, p.cost c2, to_char(s.sql_text) c3 from dba_hist_sql_plan p, dba_hist_sqltext s where p.id = 0 and p.sql_id = s.sql_id and p.cost is not null
----------
awr_sql_details.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* Please enter SQL ID: format format format format format a20 a20 a25 999,999 999,999
accept sqlid prompt col col col col col c1 c2 c3 c4 c5 heading heading heading heading heading
select operation c1, options c2, object_name c3, search_columns c4, cardinality c5 from dba_hist_sql_plan p where p.sql_id = '&sqlid' order by p.id;
----------
awr_hash_join_alert.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* format a20 format 99,999,999 format 99,999,999
col c1 heading Date col c2 heading Hash Join Count col c3 heading Rows Processed
select to_char(sn.begin_interval_time,'yy-mm-dd hh24') c1, count(*) c2, sum(st.rows_processed_delta) c3, sum(st.disk_reads_delta) c4, sum(st.cpu_time_delta) c5 from dba_hist_snapshot sn, dba_hist_sql_plan p, dba_hist_sqlstat st where st.sql_id = p.sql_id and sn.snap_id = st.snap_id and p.operation = 'HASH JOIN' having count(*) > &hash_thr group by begin_interval_time;
----------
plan10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
spool plan.lst set echo off set feedback on set pages 999; column nbr_FTS column num_rows column blocks column owner column name column ch column time format 99,999 format 999,999 format 9,999 format a10; format a30; format a1; heading "Snapshot Time"
select object_owner, count(*) ct from dba_hist_sql_plan where object_owner is not null group by object_owner order by ct desc ; --spool access.lst; set heading on; set feedback on; ttitle 'full table scans and counts The "K" indicates that the table is in th e KEEP Pool (Oracle8).' select to_char(sn.end_interval_time,'mm/dd/rr hh24') time, p.owner, p.name, t.num_rows, -- ltrim(t.cache) ch, decode(t.buffer_pool,'KEEP','Y','DEFAULT','N') K, s.blocks blocks, sum(a.executions_delta) nbr_FTS from dba_tables t, dba_segments s, dba_hist_sqlstat a, dba_hist_snapshot sn, (select distinct pl.sql_id, object_owner owner, object_name name from dba_hist_sql_plan pl where operation = 'TABLE ACCESS' and options = 'FULL') p where a.snap_id = sn.snap_id and a.sql_id = p.sql_id and t.owner = s.owner and t.table_name = s.segment_name and t.table_name = p.name and
t.owner = p.owner and t.owner not in ('SYS','SYSTEM') having sum(a.executions_delta) > 1 group by to_char(sn.end_interval_time,'mm/dd/rr hh24'),p.owner, p.name, t.num_rows, t. cache, t.buffer_pool, s.blocks order by 1 asc; column column column column nbr_RID num_rows owner name format format format format 999,999,999 999,999,999 a15; a25;
ttitle 'Table access by ROWID and counts' select to_char(sn.end_interval_time,'mm/dd/rr hh24') time, p.owner, p.name, t.num_rows, sum(a.executions_delta) nbr_RID from dba_tables t, dba_hist_sqlstat a, dba_hist_snapshot sn, (select distinct pl.sql_id, object_owner owner, object_name name from dba_hist_sql_plan pl where operation = 'TABLE ACCESS' and options = 'BY USER ROWID') p where a.snap_id = sn.snap_id and a.sql_id = p.sql_id and t.table_name = p.name and t.owner = p.owner having sum(a.executions_delta) > 9 group by to_char(sn.end_interval_time,'mm/dd/rr hh24'),p.owner, p.name, t.num_rows order by 1 asc; --************************************************* -- Index Report Section --************************************************* column nbr_scans format 999,999,999 column num_rows format 999,999,999 column tbl_blocks format 999,999,999
column owner format a9; column table_name format a20; column index_name format a20; ttitle 'Index full scans and counts' select to_char(sn.end_interval_time,'mm/dd/rr hh24') time, p.owner, d.table_name, p.name index_name, seg.blocks tbl_blocks, sum(s.executions_delta) nbr_scans from dba_segments seg, dba_indexes d, dba_hist_sqlstat s, dba_hist_snapshot sn, (select distinct pl.sql_id, object_owner owner, object_name name from dba_hist_sql_plan pl where operation = 'INDEX' and options = 'FULL SCAN') p where d.index_name = p.name and s.snap_id = sn.snap_id and s.sql_id = p.sql_id and d.table_name = seg.segment_name and seg.owner = p.owner having sum(s.executions_delta) > 9 group by to_char(sn.end_interval_time,'mm/dd/rr hh24'),p.owner, d.table_name, p.name, seg.blocks order by 1 asc; ttitle 'Index range scans and counts' select to_char(sn.end_interval_time,'mm/dd/rr hh24') time, p.owner, d.table_name, p.name index_name, seg.blocks tbl_blocks, sum(s.executions_delta) nbr_scans from dba_segments seg, dba_hist_sqlstat s, dba_hist_snapshot sn, dba_indexes d, (select distinct
pl.sql_id, object_owner owner, object_name name from dba_hist_sql_plan pl where operation = 'INDEX' and options = 'RANGE SCAN') p where d.index_name = p.name and s.snap_id = sn.snap_id and s.sql_id = p.sql_id and d.table_name = seg.segment_name and seg.owner = p.owner having sum(s.executions_delta) > 9 group by to_char(sn.end_interval_time,'mm/dd/rr hh24'),p.owner, d.table_name, p.name, seg.blocks order by 1 asc; ttitle 'Index unique scans and counts' select to_char(sn.end_interval_time,'mm/dd/rr hh24') time, p.owner, d.table_name, p.name index_name, sum(s.executions_delta) nbr_scans from dba_hist_sqlstat s, dba_hist_snapshot sn, dba_indexes d, (select distinct pl.sql_id, object_owner owner, object_name name from dba_hist_sql_plan pl where operation = 'INDEX' and options = 'UNIQUE SCAN') p where d.index_name = p.name and s.snap_id = sn.snap_id and s.sql_id = p.sql_id having sum(s.executions_delta) > 9 group by to_char(sn.end_interval_time,'mm/dd/rr hh24'),p.owner, d.table_name, p.name order by 1 asc;
spool off
----------
spacesum8i.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select tablespace_name, autoextend, round ((total_space / 1024 / 1024), 2) as total_space, round ((total_free_space / 1024 / 1024), 2) as total_free, round (((total_space - total_free_space) / 1024 / 1024), 2) as used_space, to_char ( nvl ( round ( (100 * sum_free_blocks / sum_alloc_blocks),2),0)) '%' as pct_free from (select tablespace_name, max (autoextensible) autoextend, sum (blocks) sum_alloc_blocks, sum (bytes) as total_space from dba_data_files group by tablespace_name), (select b.tablespace_name fs_ts_name, nvl (sum (bytes), 0) as total_free_space, sum (blocks) as sum_free_blocks from dba_free_space a, dba_tablespaces b where a.tablespace_name (+) = b.tablespace_name group by b.tablespace_name, status) where tablespace_name = fs_ts_name union all select d.tablespace_name, autoextend, round ((a.bytes / 1024 / 1024), 2), round ((a.bytes / 1024 / 1024) (nvl (t.bytes, 0) / 1024 / 1024), 2),
round (nvl (t.bytes, 0) / 1024 / 1024, 2), to_char (100 - (nvl (t.bytes / a.bytes * 100, 0)), '990.00') from sys.dba_tablespaces d, (select tablespace_name, max (autoextensible) autoextend, sum (bytes) bytes from dba_temp_files group by tablespace_name) a, (select tablespace_name, sum (bytes_cached) bytes from sys.v_$temp_extent_pool group by tablespace_name) t where and and and order d.tablespace_name = a.tablespace_name (+) d.tablespace_name = t.tablespace_name (+) d.extent_management like 'LOCAL' d.contents like 'TEMPORARY' by 1;
----------
datafileae.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* b.file_name, b.tablespace_name, decode(c.inc,null,'no','yes') autoextend from sys.dba_data_files b, sys.filext$ c
select
-tsfrag.sql -- ************************************************* -- Copyright 2005 by Rampant TechPress -- This script is free for non-commercial purposes
------
with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select tablespace_name, count(*) free_chunks, decode(round((max(bytes) / 1024000),2),null,0, round((max(bytes) / 1024000),2)) largest_chunk, nvl(round(sqrt(max(blocks)/sum(blocks))* (100/sqrt(sqrt(count(blocks)) )),2),0) fragmentation_index from sys.dba_free_space group by tablespace_name order by 2 desc, 1;
----------
dffrag.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* b.file_name, b.tablespace_name, nvl(round(sqrt(max(a.blocks)/ sum(a.blocks))*(100/sqrt(sqrt(count(a.blocks)) )),2),0) fragmentation_index, decode(c.inc,null,'no','yes') autoextend, count (*) free_chunks, decode ( round ((max (a.bytes) / 1024000), 2), null, 0, round ((max (a.bytes) / 1024000), 2)) largest_chunk from sys.dba_free_space a, sys.dba_data_files b, sys.filext$ c
select
where b.tablespace_name = a.tablespace_name (+) and c.file# (+)= a.file_id and b.file_id = a.file_id (+) group by b.file_name, decode(c.inc,null,'no','yes'), b.tablespace_name order
by 5 desc, 1;
----------
tsmap8.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* 'free space' object_owner, ' ' object_type, ' ' object_name, file_id, block_id, bytes / 1024 size_kb, blocks
select
from sys.dba_free_space where tablespace_name = <:tablespace name> union all select owner, segment_type, decode (partition_name,null,segment_name,segment_name '.' partition_name), file_id, block_id, bytes / 1024, blocks from sys.dba_extents where tablespace_name = <:tablespace name> order by 4,5;
----------
maxext8.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select owner, decode(partition_name,NULL,segment_name,segment_name '.' partition_name) segment_name, segment_type, extents, max_extents, initial_extent, next_extent, tablespace_name from sys.dba_segments where max_extents - extents <= 5 and segment_type <> 'CACHE' order by 1,2,3;
----------
objdef.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select a.owner, a.segment_name, a.segment_type, a.tablespace_name, a.next_extent, max(c.bytes) max_contig_space from sys.dba_segments a, sys.dba_free_space c where a.tablespace_name = c.tablespace_name and a.next_extent > (select max(bytes) from sys.dba_free_space b where a.tablespace_name = b.tablespace_name and b.tablespace_name = c.tablespace_name) group by a.owner, a.segment_name, a.tablespace_name, a.segment_type, a.next_extent
----------
awr_list_seg_block_space.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
drop type BlckFreeSpaceSet; drop type BlckFreeSpace; create type BlckFreeSpace as object ( seg_owner varchar2(30), seg_type varchar2(30), seg_name varchar2(100), fs1 number, fs2 number, fs3 number, fs4 number, fb number ); create type BlckFreeSpaceSet as table of BlckFreeSpace; create or replace function BlckFreeSpaceFunc (seg_owner IN varchar2, seg_type in varchar2 default null) return BlckFreeSpaceSet pipelined is outRec BlckFreeSpace := BlckFreeSpace(null,null,null,null,null,null,null,null ); fs1_b number; fs2_b number; fs3_b number; fs4_b number; fs1_bl number; fs2_bl number; fs3_bl number; fs4_bl number; fulb number; fulbl number; u_b number; u_bl number; begin for rec in (select s.owner,s.segment_name,s.segment_type from dba_segments s w here owner = seg_owner and segment_type = nvl(seg_type,segment_type) ) loop dbms_space.space_usage ( segment_owner => rec.owner, segment_name => rec.segment_name, segment_type => rec.segment_type, fs1_bytes => fs1_b,
fs1_blocks fs2_bytes fs2_blocks fs3_bytes fs3_blocks fs4_bytes fs4_blocks full_bytes full_blocks unformatted_blocks unformatted_bytes );
=> => => => => => => => => => =>
fs1_bl, fs2_b, fs2_bl, fs3_b, fs3_bl, fs4_b, fs4_bl, fulb, fulbl, u_bl, u_b
outRec.seg_owner := rec.owner; outRec.seg_type := rec.segment_type; outRec.seg_name := rec.segment_name; outRec.fs1 outRec.fs2 outRec.fs3 outRec.fs4 outRec.fb := := := := := fs1_bl; fs2_bl; fs3_bl; fs4_bl; fulbl;
----------
awr_report_seg_block_space.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
col seg_owner heading 'Segment Owner' format a10 col seg_type heading 'Segment Type' format a10 col seg_name heading 'Segment Name' format a30 col col col col col fs1 fs2 fs3 fs4 fb heading heading heading heading heading '0-25% Free Space' '25-50% Free Space' '50-75% Free Space' '75-100% Free Space' 'Full Blocks' format format format format format 9,999 9,999 9,999 9,999 9,999
----------
awr_estimate_index_cost.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
declare u_bytes number; a_bytes number; begin dbms_space.create_index_cost ( ddl => 'create index stats$sysstat_idx on stats$sysstat ' '(value) tablespace sysaux', used_bytes => u_bytes, alloc_bytes => a_bytes ); dbms_output.put_line ('Used Bytes = ' u_bytes); dbms_output.put_line ('Allocated Bytes = ' a_bytes); end; /
----------
workspace_status.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* WORKSPACE FORMAT a10 HEADING 'Workspace' owner FORMAT a10 HEADING 'Owner' freeze_status FORMAT a8 HEADING 'Freeze Status' resolve_status FORMAT a8 HEADING 'Resolve Status' parent_workspace FORMAT a10 HEADING 'Parent Workspace' freeze_mode FORMAT a8 HEADING 'Freeze Mode'
spool workspace_status select workspace, NVL(parent_workspace,'NONE') parent_workspace, owner, freeze_status, NVL(freeze_mode,'NONE') freeze_mode, resolve_status from dba_workspaces ; spool off ttitle off
----------
pga_advice.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
ttitle 'PGA Target Advice Report' set lines 80 pages 47 spool pga_advice SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb, ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc, ESTD_OVERALLOC_COUNT FROM v$pga_target_advice / spool off ttitle off
----------
dbagranted.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
----------
sensprivs.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select grantee, privilege, admin_option from sys.dba_sys_privs where (privilege like '%ANY%' or privilege like '%DROP%' or privilege in ('ALTER SYSTEM', 'ALTER TABLESPACE', 'BECOME USER', 'UNLIMITED TABLESPACE')) and grantee not in ('SYS','SYSTEM') and grantee not in (select role from sys.dba_roles) union all select grantee, privilege, admin_option from sys.dba_sys_privs where (privilege like '%ANY%' or privilege like '%DROP%' or privilege in ('ALTER SYSTEM', 'ALTER TABLESPACE', 'BECOME USER', 'UNLIMITED TABLESPACE')) and
grantee not in ('SYS','SYSTEM') and grantee in (select role from sys.dba_roles where role not in ('DBA', 'AQ_ADMINISTRATOR_ROLE', 'IMP_FULL_DATABASE', 'SNMPAGENT', 'OEM_MONITOR', 'EXP_FULL_DATABASE'));
----------
badstorage.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select a.name username,'system as default' privilege from sys.user$ a, sys.ts$ dts, sys.ts$ tts where (a.datats# = dts.ts# and a.tempts# = tts.ts#) and (dts.name = 'SYSTEM' or tts.name = 'SYSTEM') and a.name not in ('SYS', 'SYSTEM') union select username,'system quotas' from sys.dba_ts_quotas where tablespace_name = 'system' and username not in ('SYS', 'SYSTEM') union select grantee,'unlimited tablespace' from dba_sys_privs where privilege = 'unlimited tablespace' and grantee not in ('SYS', 'SYSTEM') order by 1;
----------
totuserspace.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* owner, round((byte_count / 1024 / 1024),2) space_used_mb, round(100 * (byte_count / tot_bytes),2) pct_of_database
select
from (select owner , sum(bytes) as byte_count from sys.dba_segments where segment_type not in ('TEMPORARY','CACHE') group by owner order by 2 desc), (select sum(bytes) as tot_bytes from sys.dba_segments);
----------
sortusage.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* tablespace_name, current_users, total_extents, used_extents, free_extents, max_used_size, max_sort_size
select
----------
sortdet.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* sql_text, sid, c.username, machine, tablespace, extents, blocks
select
from sys.v_$sort_usage a, sys.v_$sqlarea b, sys.v_$session c where a.sqladdr = b.address and a.sqlhash = b.hash_value and a.session_addr = c.saddr order by sid;
----------
metric_summary.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select metric_name Metric Name , metric_unit "Metric Unit", minval "Minimum Value", maxval "Maximum Value", average "Average Value" from DBA_HIST_SYSMETRIC_SUMMARY where snap_id = &pEndSnap and dbid = &pDbId
and instance_number
= &pInstNum
----------
sys_stat_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] ************************************************* e.stat_name "Statistic Name" e.value - b.value "Total" round((e.value - b.value)/ select avg( extract( day from (e1.end_interval_time-b1.end_interval_time) )*24*6 extract( hour from (e1.end_interval_time-b1.end_interval_time) )*60*6
select , , ( 0*60+ 0+
extract( minute from (e1.end_interval_time-b1.end_interval_time) )*60 + extract( second from (e1.end_interval_time-b1.end_interval_time)) ) from dba_hist_snapshot b1 ,dba_hist_snapshot e1 where b1.snap_id = b.snap_id and e1.snap_id = e.snap_id and b1.dbid = b.dbid and e1.dbid = e.dbid and b1.instance_number = b.instance_number and e1.instance_number = e.instance_number and b1.startup_time = e1.startup_time and b1.end_interval_time < e1.end_interval_time ),2) "Per Second" from dba_hist_sysstat b , dba_hist_sysstat e where b.snap_id = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid = &pDbId and e.dbid = &pDbId and b.instance_number = &pInstNum and e.instance_number = &pInstNum and b.stat_id = e.stat_id and e.stat_name not in ( 'logons current' , 'opened cursors current' , 'workarea memory allocated' ) and e.value >= b.value and e.value > 0 order by 1 asc
----------
os_stat_int_10g.sql ************************************************* Copyright 2005 by Rampant TechPress This script is free for non-commercial purposes with no warranties. Use at your own risk. To license this script for a commercial purpose, contact [email protected] *************************************************
select e.stat_name "Statistic Name" , decode(e.stat_name, 'NUM_CPUS', e.value, e.value - b.value) "Total" , decode( instrb(e.stat_name, 'BYTES'), 0, to_number(null) , round((e.value - b.value)/( select avg( extract( day from (e1.end_interval_time-b1.end_interval_time) )*24*6 0*60+ extract( hour from (e1.end_interval_time-b1.end_interval_time) )*60*6 0+ extract( minute from (e1.end_interval_time-b1.end_interval_time) )*60+ extract( second from (e1.end_interval_time-b1.end_interval_time)) ) from dba_hist_snapshot b1 ,dba_hist_snapshot e1 where b1.snap_id = b.snap_id and e1.snap_id = e.snap_id and b1.dbid = b.dbid and e1.dbid = e.dbid and b1.instance_number = b.instance_number and e1.instance_number = e.instance_number and b1.startup_time = e1.startup_time and b1.end_interval_time < e1.end_interval_time ),2)) "Per Second" from dba_hist_osstat b , dba_hist_osstat e where b.snap_id = &pBgnSnap and e.snap_id = &pEndSnap and b.dbid = &pDbId and e.dbid = &pDbId and b.instance_number = &pInstNum and e.instance_number = &pInstNum and b.stat_id = e.stat_id and e.value >= b.value and e.value > 0 order by 1 asc