打印本文 打印本文 关闭窗口 关闭窗口
Oracle’sDBMS_Profiler:PL/SQL性能调整
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2575  更新时间:2009/4/22 23:22:23  文章录入:mintao  责任编辑:mintao
 

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]  下一页

打印本文 打印本文 关闭窗口 关闭窗口