Trace Analyzer, also known as TRCANLZR or TRCA, is a tool provided by Oracle Server Technologies Center of Expertise - ST CoE. TRCA inputs one or several SQL trace(s) generated by Event 10046 and outputs a diagnostics report in two formats (html and text). These reports are commonly used to diagnose processes performing poorly.
REM File: yury1.sqlset echo off feed off lines 110 pages 9990REM Copyright (c) 2011, TPG, all rights reservedclear breakclear colclear computettitle offbtitle offundefine starthh24undefine endhh24undefinedaysagocol beginttim heading 'Begin|Interval' format a15 trunccol numtimes format 9,990 head 'Num|Times'col sql_id heading 'SQL ID' format a13col sumcputimeDelta heading 'SUM|CPU|Time|Delta' format 9,999,999,990col buffer_gets_Delta heading 'Buff|Gets' format 999,999,990col sumdiskreadsDelta heading 'SUM|Disk|Reads' format 9,999,990col sumiowaitDelta heading 'SUM|IO|Wait' format 9,999,999,990break on beginttim skip 1ttitle skip 1 center 'Top 10 SQL Delta Statistics &&daysago Days ago Hours &&starthh24 to &&endhh24' skip 2spool yury1.lisselect * from( selects.SQL_ID , sum( s.CPU_TIME_DELTA ) sumCPUTIMEDELTA , sum( s.DISK_READS_DELTA ) sumDISKREADSDELTA , sum( s.IOWAIT_DELTA ) sumiowaitDELTA , count( * ) numtimes from DBA_HIST_SQLSTAT s, DBA_HIST_SNAPSHOT p, DBA_HIST_SQLTEXT t where ( s.SNAP_ID = p.SNAP_ID ) and ( s.SQL_ID = t.SQL_ID ) and ( EXTRACT( HOUR FROM p.END_INTERVAL_TIME ) between &starthh24 and &endhh24 ) and ( t.COMMAND_TYPE != 47 ) -- Exclude PL/SQL blocks from output and ( p.END_INTERVAL_TIME between ( SYSDATE - &daysago ) and SYSDATE ) group bys.SQL_ID order by sum( s.CPU_TIME_DELTA ) desc )whererownum < 11/PROMPTspool offclear breakclear colclear computettitle offbtitle offset echo on feedback on lines 80 pages 60 term on
CREATE OR REPLACE function phy_get_secs (t1 in timestamp, t2 in timestamp)return number is sec_diff number;t_delta interval day to second;begint_delta := t2 - t1;sec_diff := ( extract(hour from t_delta)*60*60 + extract(minute from t_delta)*60 + extract(second from t_delta));return sec_diff;end;/show err
set pages 1000prompt SNAP_TIME_P|SNAP_TIME|SEC_D|VALUE_P|VALUE|VALUE_D|VALUE_PER_SECselect /*+ ORDERED FULL(st) */ LAG (st.SNAP_TIME) OVER (ORDER BY st.SNAP_TIME)||'|'||st.SNAP_TIME||'|'||trunc((st.SNAP_TIME - LAG (st.SNAP_TIME) OVER (ORDER BY st.SNAP_TIME))*24*60*60)||'|'|| LAG (ss.value) OVER (ORDER BY st.SNAP_TIME)||'|'||ss.value||'|'|| ( ss.value - LAG (ss.value) OVER (ORDER BY st.SNAP_TIME) )||'|'||trunc( ( ss.value - LAG (ss.value) OVER (ORDER BY st.SNAP_TIME) ) / ((st.SNAP_TIME - LAG (st.SNAP_TIME) OVER (ORDER BY st.SNAP_TIME))*24*60*60) ) fromv$databasevd,stats$snapshotst, V$STATNAME sn, STATS$SYSSTAT ss where 1=1 and ss.snap_id=st.snap_id and ss.instance_number=1 and ss.dbid=vd.dbid and sn.STATISTIC#=ss.STATISTIC# and sn.name='parse count (hard)' and st.SNAP_TIME between trunc(sysdate)-14 and trunc(sysdate) order by st.SNAP_TIME;select s.BEGIN_INTERVAL_TIME,s.END_INTERVAL_TIME, t.VALUE EVALUE, LAG (t.VALUE) OVER (ORDER BY s.BEGIN_INTERVAL_TIME) BVALUE,t.VALUE-LAG (t.VALUE) OVER (ORDER BY s.BEGIN_INTERVAL_TIME) DVALUE,s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME DTIME, EXTRACT(HOUR FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) H, EXTRACT(MINUTE FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) M, EXTRACT(SECOND FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) S, EXTRACT(HOUR FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60*60+EXTRACT(MINUTE FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60+EXTRACT(SECOND FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) Secs, (t.VALUE-LAG (t.VALUE) OVER (ORDER BY s.BEGIN_INTERVAL_TIME))/(EXTRACT(HOUR FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60*60+EXTRACT(MINUTE FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60+EXTRACT(SECOND FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)) VAL_SECfrom DBA_HIST_SNAPSHOT s, DBA_HIST_SYSSTAT twhere 1=1 and s.SNAP_ID = t.SNAP_ID and s.DBID = t.DBID and s.INSTANCE_NUMBER = t.INSTANCE_NUMBER and s.INSTANCE_NUMBER = (select INSTANCE_NUMBER from V$INSTANCE) and s.DBID = (select DBID from V$DATABASE) and t.STAT_NAME = 'parse count (hard)'order bys.BEGIN_INTERVAL_TIME;CREATE OR REPLACE function phy_get_secs (t1 in timestamp, t2 in timestamp)return number is sec_diff number;t_delta interval day to second;begint_delta := t2 - t1;sec_diff := ( extract(hour from t_delta)*60*60 + extract(minute from t_delta)*60 + extract(second from t_delta));return sec_diff;end;/show errcolumn snap_date for a20select cast (s.BEGIN_INTERVAL_TIME as date) snap_date, (t.TIME_WAITED_MICRO-LAG (t.TIME_WAITED_MICRO) OVER (ORDER BY s.BEGIN_INTERVAL_TIME))/(t.TOTAL_WAITS-LAG (t.TOTAL_WAITS) OVER (ORDER BY s.BEGIN_INTERVAL_TIME))/1000 ms_per_ev, (t.TOTAL_WAITS-LAG (t.TOTAL_WAITS) OVER (ORDER BY s.BEGIN_INTERVAL_TIME))/(EXTRACT(HOUR FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60*60+EXTRACT(MINUTE FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60+EXTRACT(SECOND FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)) ev_SECfrom DBA_HIST_SNAPSHOT s, DBA_HIST_SYSTEM_EVENT twhere 1=1 and s.SNAP_ID = t.SNAP_ID and s.DBID = t.DBID and s.INSTANCE_NUMBER = t.INSTANCE_NUMBER and s.INSTANCE_NUMBER = (select INSTANCE_NUMBER from V$INSTANCE) and s.DBID = (select DBID from V$DATABASE) and t.EVENT_NAME = 'db file scattered read'order bys.BEGIN_INTERVAL_TIME;select sh.BEGIN_INTERVAL_TIME d ,trunc(st.TOTAL_WAITS-(LAG(st.TOTAL_WAITS) OVER (ORDER BY sh.BEGIN_INTERVAL_TIME))) tw_d ,trunc(st.TOTAL_TIMEOUTS-(LAG(st.TOTAL_TIMEOUTS) OVER (ORDER BY sh.BEGIN_INTERVAL_TIME))) tt_d ,trunc((st.TIME_WAITED_MICRO-(LAG(st.TIME_WAITED_MICRO) OVER (ORDER BY sh.BEGIN_INTERVAL_TIME)))/1000000) w_d_secsfrom DBA_HIST_SYSTEM_EVENT st, DBA_HIST_SNAPSHOT shwhere 1=1and st.SNAP_ID=sh.SNAP_IDand st.EVENT_NAME = 'enq: TX - row lock contention'order by sh.BEGIN_INTERVAL_TIME;
select s.BEGIN_INTERVAL_TIME,s.END_INTERVAL_TIME, t.VALUE EVALUE, LAG (t.VALUE) OVER (ORDER BY s.BEGIN_INTERVAL_TIME) BVALUE,t.VALUE-LAG (t.VALUE) OVER (ORDER BY s.BEGIN_INTERVAL_TIME) DVALUE,s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME DTIME, EXTRACT(HOUR FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) H, EXTRACT(MINUTE FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) M, EXTRACT(SECOND FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) S, EXTRACT(HOUR FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60*60+EXTRACT(MINUTE FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60+EXTRACT(SECOND FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME) Secs, (t.VALUE-LAG (t.VALUE) OVER (ORDER BY s.BEGIN_INTERVAL_TIME))/(EXTRACT(HOUR FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60*60+EXTRACT(MINUTE FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)*60+EXTRACT(SECOND FROM s.END_INTERVAL_TIME-s.BEGIN_INTERVAL_TIME)) VAL_SECfrom DBA_HIST_SNAPSHOT s, DBA_HIST_SYSSTAT twhere 1=1 and s.SNAP_ID = t.SNAP_ID and s.DBID = t.DBID and s.INSTANCE_NUMBER = t.INSTANCE_NUMBER and s.INSTANCE_NUMBER = (select INSTANCE_NUMBER from V$INSTANCE) and s.DBID = (select DBID from V$DATABASE) and t.STAT_NAME = 'parse count (hard)'order bys.BEGIN_INTERVAL_TIME;CREATE OR REPLACE function phy_get_secs(t_delta interval day to second)return number is sec_diff number;begin-- t_delta:= t2 - t1;sec_diff := ( extract(hour from t_delta)*60*60 + extract(minute from t_delta)*60 + extract(second from t_delta));return sec_diff;end;/show err