Step 1. Recent Executions from Cursor Cache


COL inst_id           FOR 99

COL sql_id            FOR a13

COL child_number      FOR 999

COL plan_hash_value   FOR 9999999999

COL last_active_time  FOR a20

COL execs             FOR 999,999

COL elapsed_s         FOR 999,999,999.99

COL cpu_s             FOR 999,999,999.99

COL io_s              FOR 999,999,999.99

COL buffer_gets       FOR 999,999,999

COL disk_reads        FOR 999,999,999

COL rows_proc         FOR 999,999,999


SELECT inst_id,

       sql_id,

       child_number,

       plan_hash_value,

       TO_CHAR(last_active_time,'YYYY-MM-DD HH24:MI:SS') last_active_time,

       executions                  execs,

       ROUND(elapsed_time/1e6,2)   elapsed_s,

       ROUND(cpu_time/1e6,2)       cpu_s,

       ROUND(user_io_wait_time/1e6,2) io_s,

       buffer_gets,

       disk_reads,

       rows_processed              rows_proc

FROM   gv$sql

WHERE  sql_id='&sql_id'

ORDER  BY last_active_time COL wait_or_class FOR a35

COL op            FOR a40


SELECT NVL(event, wait_class) AS wait_or_class,

       COUNT(*) samples,

       ROUND(100*RATIO_TO_REPORT(COUNT(*)) OVER (),1) pct

FROM   dba_hist_active_sess_history

WHERE  sql_id='&sql_id'

GROUP  BY NVL(event, wait_class)

ORDER  BY samples DESC FETCH FIRST 20 ROWS ONLY;


SELECT plan_hash_value,

       sql_plan_line_id,

       sql_plan_operation||' '||sql_plan_options op,

       COUNT(*) samples

FROM   dba_hist_active_sess_history

WHERE  sql_id='&sql_id'

GROUP  BY plan_hash_value, sql_plan_line_id, sql_plan_operation, sql_plan_options

ORDER  BY samples DESC FETCH FIRST 20 ROWS ONLY;


Step 2. Execution History from AWR (no time filter)


COL snap_time        FOR a20

COL plan_hash_value  FOR 9999999999

COL execs            FOR 999,999

COL elapsed_s        FOR 999,999,999.99

COL cpu_s            FOR 999,999,999.99

COL io_s             FOR 999,999,999.99

COL gc_s             FOR 999,999,999.99

COL buffer_gets      FOR 999,999,999

COL disk_reads       FOR 999,999,999

COL rows_proc        FOR 999,999,999


SELECT TO_CHAR(s.begin_interval_time,'YYYY-MM-DD HH24:MI') snap_time,

       ss.plan_hash_value,

       ss.executions_delta        execs,

       ROUND(ss.elapsed_time_delta/1e6,2) elapsed_s,

       ROUND(ss.cpu_time_delta/1e6,2)     cpu_s,

       ROUND(ss.iowait_delta/1e6,2)       io_s,

       ROUND(ss.cluster_wait_time_delta/1e6,2) gc_s,

       ss.buffer_gets_delta       buffer_gets,

       ss.disk_reads_delta        disk_reads,

       ss.rows_processed_delta    rows_proc

FROM   dba_hist_sqlstat ss

JOIN   dba_hist_snapshot s

  ON ss.snap_id = s.snap_id

 AND ss.dbid    = s.dbid

 AND ss.instance_number = s.instance_number

WHERE  ss.sql_id='&sql_id'

ORDER  BY s.begin_interval_time DESC;



Step 3. ASH Analysis (Top Waits & Plan Lines)


COL wait_or_class FOR a35

COL op            FOR a40


SELECT NVL(event, wait_class) AS wait_or_class,

       COUNT(*) samples,

       ROUND(100*RATIO_TO_REPORT(COUNT(*)) OVER (),1) pct

FROM   dba_hist_active_sess_history

WHERE  sql_id='&sql_id'

GROUP  BY NVL(event, wait_class)

ORDER  BY samples DESC FETCH FIRST 20 ROWS ONLY;


SELECT plan_hash_value,

       sql_plan_line_id,

       sql_plan_operation||' '||sql_plan_options op,

       COUNT(*) samples

FROM   dba_hist_active_sess_history

WHERE  sql_id='&sql_id'

GROUP  BY plan_hash_value, sql_plan_line_id, sql_plan_operation, sql_plan_options

ORDER  BY samples DESC FETCH FIRST 20 ROWS ONLY;



Step 4. RAC-Specific (GC waits by Instance & Object)


-- Instance distribution

SELECT instance_number, COUNT(*) samples

FROM   dba_hist_active_sess_history

WHERE  sql_id='&sql_id'

GROUP  BY instance_number

ORDER  BY samples DESC;


-- Objects contributing to GC waits

SELECT NVL(o.owner||'.'||o.object_name,'-') object_name,

       COUNT(*) samples

FROM   dba_hist_active_sess_history a

LEFT   JOIN dba_objects o ON a.current_obj#=o.object_id

WHERE  a.sql_id='&sql_id'

AND    a.wait_class='Cluster'

GROUP  BY NVL(o.owner||'.'||o.object_name,'-')

ORDER  BY samples DESC FETCH FIRST 15 ROWS ONLY;












Popular posts from this blog