对比PL/SQL profiler剖析结果(七)

2014-11-24 16:47:23 · 作者: · 浏览: 3
==='); exception when others then report_exception('Print_Summarized_Report', false); end print_summarized_report; -- Set size of window for reports procedure set_window_size(window_size IN pls_integer) is begin if (window_size < 0) then window := 999999999; else window := window_size; end if; end set_window_size; end prof_report_utilities; / show errors; b、剖析报告脚本profsum.sql --file_name: profsum.sql set echo off set linesize 5000 set trimspool on set serveroutput on set termout off column owner format a11 column unit_name format a14 column text format a21 word_wrapped column runid format 999999 column secs format 99999.99 column hsecs format 99999.99 column grand_total format 9999.99 column run_comment format a11 word_wrapped column line# format 99999 column pct format 9999.9 column unit_owner format a11 spool profsum.out --Clean out rollup results, and recreate -- update plsql_profiler_units set total_time = 0; execute prof_report_utilities.rollup_all_runs; prompt = prompt = prompt ==================== prompt total time select grand_total/1000000000 as grand_total from plsql_profiler_grand_total; prompt = prompt = prompt ==================== prompt total time spent on each run select runid, substr(run_comment,1, 30) as run_comment, run_total_time/1000000000 as secs from (select a.runid, sum(a.total_time) run_total_time, b.run_comment from plsql_profiler_units a, plsql_profiler_runs b where a.runid = b.runid group by a.runid, b.run_comment ) where run_total_time > 0 order by runid asc; prompt = prompt = prompt ==================== prompt percentage of time in each module, for each run separately select p1.runid, substr(p2.run_comment, 1, 20) as run_comment, p1.unit_owner, decode(p1.unit_name, '', '', substr(p1.unit_name,1, 20)) as unit_name, p1.total_time/1000000000 as secs, TO_CHAR(100*p1.total_time/p2.run_total_time, '999.9') as percentage from plsql_profiler_units p1, (select a.runid, sum(a.total_time) run_total_time, b.run_comment from plsql_profiler_units a, plsql_profiler_runs b where a.runid = b.runid group by a.runid, b.run_comment ) p2 where p1.runid=p2.runid and p1.total_time > 0 and p2.run_total_time > 0 and (p1.total_time/p2.run_total_time) >= .01 order by p1.runid asc, p1.total_time desc; column secs form 99999.99 prompt = prompt = prompt ==================== prompt percentage of time in each module, summarized across runs select p1.unit_owner, decode(p1.unit_name, '', '
', substr(p1.unit_name,1, 25)) as unit_name, p1.total_time/1000000000 as secs, TO_CHAR(100*p1.total_time/p2.grand_total, '99999.99') as percentage from plsql_profiler_units_cross_run p1, plsql_profiler_grand_total p2 order by p1.total_time DESC; prompt = prompt = prompt ==================== prompt lines taking more than 1% of the total time, each run separate select p1.runid as runid, p1.total_time/10000000 as hsecs, p1.total_time/p4.grand_total*100 as pct, substr(p2.unit_owner, 1, 20) as owner, decode(p2.unit_name, '', '', substr(p2.unit_name,1, 20)) as unit_name, p1.line#, ( select p3.text from all_source p3 where p3.owner = p2.unit_owner and p3.line = p1.line# and p3.name=p2.unit_name and p3.type not in ( 'PACKAGE', 'TYPE' )) text from plsql_profiler_data p1, plsql_profiler_units p2, plsql_profiler_grand_total p4 where (p1.total_time >= p4.grand_total/100) AND p1.runid = p2.runid and p2.unit_number=p1.unit_number order by p1.total_time desc; prompt = prompt = prompt ==================== prompt most popular lines (more than 1%), summarize across all runs select p1.total_time/10000000 as hsecs, p1.total_time/p4.grand_total*100 as pct, substr(p1.unit_owner, 1, 20) as unit_owner, decode(p1.unit_name, '', '', substr(p1.unit_name,1, 20)) as unit_name, p1.line#, ( select p3.text from all_source p3 where (p3.line = p1.line#) and (p3.owner = p1.unit_owner) AND (p3.name = p1.unit_name) and (p3.type not in ( 'PACKAGE', 'TYPE' ) ) ) text from plsql_profiler_lines_cross_run p1, plsql_profiler_grand_total p4 where (p1.total_time >= p4.grand_total/100) order by p1.total_time desc; execute prof_report_utilities.rollup_all_runs; prompt = prompt = prompt ==================== prompt Number of lines actually executed in different units (by unit_name) select p1.unit_owner, p1.unit_name, count( decode( p1.total_occur, 0, null, 0)) as lines_executed , count(p1.line#) as lines_present, count( decode( p1.total_occur, 0, null, 0))/count(p1.line#) *100 as pct from plsql_profiler_lines_cross_