jueves, 14 de mayo de 2009

Script para listar las sentencias ejecutadas durante un periodo (ordenadas por elapsed time)

El siguiente script genera un listado ordenado por tiempo de ejecución de todas las sentencias ejecutadas en un cierto periodo de tiempo. La información se optiene del repositorio de AWR. Ademas se detallan los planes de ejecución de cada sentencia


-- -----------------------------------------------------------------------------------
-- Nombre : top_sqls.sql
-- Autor : Pablo A. Rovedo
-- Descripción : Lista las sentencias ejecutadas durante un periodo de tiempo
-- ordenadas por elapsed_time
-- -----------------------------------------------------------------------------------

set serverout on size unlimited
set pagesize 9999
set linesize 250

prompt *************************************************
prompt * Ingrese Fecha Inicial AWR [dd/mm/aaaa hh24:mi]*
prompt *************************************************
accept fecha1 prompt '> '

prompt *************************************************
prompt * Ingrese Fecha Final AWR [dd/mm/aaaa hh24.mi] *
prompt *************************************************
accept fecha2 prompt '> '

prompt ************************************************
prompt * Ingrese el Path para guardar la información *
prompt ************************************************
accept path prompt 'Path del reporte > '

set term off
spool &path


begin

dbms_output.put_line('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
dbms_output.put_line('~~~~~~~~~~~~~~~~~ Reporte de Consultas SQL y Plan de Ejecución ~~~~~~~~~~~~~~~~~');
dbms_output.put_line('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
dbms_output.put_line('-----------------------------------------------------------------');
dbms_output.put_line(' Sentencias ordenadas por ELAPSED TIME');
dbms_output.put_line('-----------------------------------------------------------------');
for i in ( select ss.sql_id,
ss.plan_hash_value,
max(ss.fetches_total) "fetch_total",
max(ss.executions_total) "exec_total",
max(ss.rows_processed_total) "rows_proc",
round(max(ss.elapsed_time_total)/1000000,2) "ela_time"
from dba_hist_sqlstat ss,
dba_hist_snapshot s
where s.snap_id = ss.snap_id
and parsing_schema_name = 'CR'
and s.begin_interval_time between to_date('&fecha1','DD/MM/YYYY HH24:MI') and
to_date('&fecha2','DD/MM/YYYY HH24:MI')
group by ss.sql_id,ss.plan_hash_value
order by "ela_time" desc)
loop
dbms_output.put_line(' ');
dbms_output.put_line(' ');
dbms_output.put_line('===================================================================');
dbms_output.put_line('SQL ID: '|| i.sql_id || ' Elapsed Time(s): ' ||i."ela_time");
dbms_output.put_line('===================================================================');

for j in (select plan_table_output
from table(dbms_xplan.display_awr(i.sql_id,i.plan_hash_value)))
loop
dbms_output.put_line(j.plan_table_output);
end loop;
end loop;
end;
/
set term on;
prompt Ejecutando Proceso...
set term off;


set term on;
prompt Fin Proceso!
set term off;
spool off;
set echo on
set verify on
set term on
prompt Archivo de Salida del reporte --> &path

No hay comentarios:

Publicar un comentario