|
4. 正如你看到的,第三行执行时间提高到86毫秒.但是改变if语句,重新执行上面的过程,将会得到新的结果: Line Occur Msec Text ---------- ---------- ---------- ------------------------------------------------------------------- 1 procedure am_perf_chk (pi_seq in number, 2 pio_status in out nocopy varchar2) is 3 2 17.978816 l_dat date := sysdate; 4 begin 5 1 8.419503 if pi_seq = 1 and trunc(l_dat) = '21-sep-02' then 6 0 0 pio_status := 'OK'; 7 else 8 1 7.512684 pio_status := 'Invalid tape loaded'; 9 end if; 10 exception 11 when others then 12 0 0 pio_status := 'Error in !am_perf_chek'; 13 1 .731657 end; 13 rows selected. Code% coverage -------------- 66.6666667
5. 正如你看到的, 这种情境下第三行执行时间从86毫秒减少到8毫秒,多余的时间是由于内置trunc()函数引起., 这种情境下如果第一个条件为false,则不会执行trunc()函数.这仅仅是个简单的例子,当你测试的例程越大,你面临的挑战更大.
这个配置结果也证明了执行期间代码被覆盖多少行,从而让我们知道处于性能监视中的代码范围。如果任何PL/SQL块性能出现问题,它也能提炼出各种不同情景的正在在执行的代码并检查配置结果,从而查明问题所在。
6. 对于一个特定的情景,如果执行一段特殊的代码段,可以得到合理的分析,即使代码根本一点都不能运行。
环境的创建
默认安装或数据库的创建状态下,DBMS_PROFILER包不会自动安装,请DBA用profload.sql脚本创建它.用一个权限较大的或一个单独的用户,创建存储统计信息的表。如果
用如SYS用户创建,则给其它用户授予DML权限,并且对这些表创建一个共同的简写名.
创建表的如下:
PLSQL_PROFILER_RUNS表:PL/SQL配置的运行细节.
PLSQL_PROFILER_UNITS表:运行中每一个库单元的信息.
PLSQL_PROFILER_DATA表:所有配置文件运行时的数据累积.
PLSQL_PROFILER_RUNNUMBER序列提供了RUNID
运行和解释配置数据
ORACLE提供了三个表来统计,填充RUNID。有许多第三方的工具可以提供自定义的基于这些数据的报告,ORACLE提供profrep.sql脚本评估数据(在<oracle_home>\plsql\demo\目录下),下面的两个简单脚本就是上面用到的,用来检查程序单元的执行时间.执行时间以毫秒存储 ----------------------------------------------------------- Script: call_profiler.sql ----------------------------------------------------------- set head off set pages 0 select decode(dbms_profiler.start_profiler, '0', 'Profiler started', 'Profiler error') from dual; --< place your routine in the below block >-- declare l_status varchar2(200); begin am_perf_chk(2, l_status); dbms_output.put_line(l_status); end; / select decode(dbms_profiler.stop_profiler, '0', 'Profiler stopped', 'Profiler error') from dual; select decode(dbms_profiler.flush_data, '0', 'Profiler flushed', 'Profiler error') from dual; select 'runid:' || plsql_profiler_runnumber.currval from dual; set head on set pages 200 ----------------------------------------------------------- Script: evaluate_profiler_results.sql ------------------上一页 [1] [2] [3] 下一页 |