Form_通过Trace分析Concurrent和Form性能和异常详解(案例)

2014-06-21 Created By BaoXinjian

一、摘要


1. 理论概念

(1). 优化器选择方式:基于Rule和基于Cost,在数据库层次进行设定

(2). 执行计划解读:解析 -> 执行 -> 提取

(3). 执行效能解析:每个动作CPU和时间,提取的次数

(4). Trace的4中方式:Trace: 常规的Trace,这种所有里面SQL的变量都被Bind Variable替代,适合性能分析;

                              Trace With Binds: 带变量值得Trace, 这种Trace的结果中带具体的值,适合问题查询;

                              Trace With Waits:

                              Trace With Binds and Waits:

(5). TkProf工具:将trc文件替换成prf文件,整理后比较容易阅读,但是SQL的执行顺序和一些信息会丢失

(6). 最终的Trace文件会呈现具体的SQL语句和每个SQL语句对应的效率如下

2. 并发程式Trace

(1).通过Request中enable trace去启动Trace功能;

        i. 产生的是Regular Trace,里面不带参数值

        ii.启动方式:调用Request是点击Enable选项

(2).通过Profile去启动单个用户下所有的Trace功能;

        i. 产生的是Trace With Binds,带参数

        ii.启动方式:a. Request的Trace Enable选项并无启动 

                    b. 修改这个User层级下的Profiler<Initialization SQL Statement - Custom>, 单行格式

                                                    begin

                                                        fnd_ctl.fnd_sess_ctl('', '','TRUE','TRUE','LOG','ALTER SESSION SET

                                                                                        EVENTS=''10046 TRACE NAME CONTEXT FOREVER, LEVEL 4''

                                                                                        TRACEFILE_IDENTIFIER=''<tar/bug#>''');

                                                     end;

                                    

         iii.重要的参数

            LEVEL 4 可被改为LEVEL 8 或者LEVEL 12,其意义分别如下:
            Use LEVEL 4 :以”Trace with Binds” 的方式进行Trace
            Use LEVEL 8 :以”Trace withWaits” 的方式进行Trace
            Use LEVEL 12 :以”Trace with Binds and Waits” 的方式进行Trace    

(3).通过SQL去启动所有用户下所有的Trace功能;

        i. 产生的Trace With Binds, 带参数

        ii.启动方式:a. 调用数据库系统级的Event 10046

                    b. 需要调用一段特定的SQL<bde_session_event_10046.sql>

                    c. 产生SQL之后再调用这段SQL,再关闭所有User的Trace

3. Form表单的Trace

(1). 使用诊断功能,启动Form的Trace with binds

(2). 进行具体操作时,其记录会产生至Trace文件中

(3). 产生Trace文件后,关闭Trace with binds

4. 非常重要的注意事项

当trace调试后,必须进行关闭,特别是在PROD环境,不然如果不关闭,User的任何操作系统会一直记录trace,会对服务器造成非常大的负担

之前在项目中就遇到被DBA Team抱怨,所以一个好的习惯非常重要

当然经常运行SQL去查询Concurrent Program是否启动trace选项做个后期预防也重要

 

二、案例分析 - Concurrent Trace 分析


案例:对Invoice History Report进行Trace分析,了解其执行效率

Step1. 在并发程式设定Enable Trace为True

Step2. 调用该程式,并记录RequestID(5820613),并根据这个ID追踪具体阐述Trace位置

Step3. 执行如下SQL,查询Trace文件名和路径

 1 SELECT   'Request id: ' || Request_Id,
 2          'Trace id: ' || Oracle_Process_Id,
 3          'Trace Flag: ' || Req.Enable_Trace,
 4             'Trace Name:'
 5          || Dest.VALUE
 6          || '/'
 7          || LOWER (Dbnm.VALUE)
 8          || '_ora_'
 9          || Oracle_Process_Id
10          || '_APPS.trc',
11          'Prog. Name: ' || Prog.User_Concurrent_Program_Name,
12             'File Name: '
13          || Execname.Execution_File_Name
14          || Execname.Subroutine_Name,
15             'Status : '
16          || DECODE (Phase_Code, 'R', 'Running')
17          || '-'
18          || DECODE (Status_Code, 'R', 'Normal'),
19          'SID Serial: ' || Ses.Sid || ',' || Ses.Serial#,
20          'Module : ' || Ses.Module
21   FROM   Fnd_Concurrent_Requests Req,
22          V$session Ses,
23          V$process Proc,
24          V$parameter Dest,
25          V$parameter Dbnm,
26          Fnd_Concurrent_Programs_Vl Prog,
27          Fnd_Executables Execname
28  WHERE       Req.Request_Id = 5820613
29          AND Req.Oracle_Process_Id = Proc.Spid(+)
30          AND Proc.Addr = Ses.Paddr(+)
31          AND Dest.Name = 'user_dump_dest'
32          AND Dbnm.Name = 'db_name'
33          AND Req.Concurrent_Program_Id = Prog.Concurrent_Program_Id
34          AND Req.Program_Application_Id = Prog.Application_Id
35          AND Prog.Application_Id = Execname.Application_Id
36          AND Prog.Executable_Id = Execname.Executable_Id

 Step4. 获取Trace文件路径名为

Step5. 通过Tkporf工具将trc文件进行格式转化为prf格式

Step6. 查看prf文件

Step7. 如下即可看到最终的trace分析文件,该文件记录的在运行Request时所使用了那些SQL和对应的效率

 

三、案例分析 - Form Trace 分析


案例:对标准Invoice Form启动Trace分析

Step1. 启动Trace with Binds

Step2. 在这个过程建立Invoice并保存

Step3. 关闭Trace with Binds

Step4.系统会自动将Trace启动和关闭之间所有业务的操作记录下来保存在Trace文件中

获取路径SQL: SELECT value FROM v$parameter WHERE name = 'user_dump_dest'; 

注意:所以当调试后,关闭Trace功能非常重要,因为你不关闭trace功能,系统会一直记录操作记录,会对服务器造成很大的负担

 

Thanks and Regards

posted on 2014-06-21 15:10  东方瀚海  阅读(945)  评论(0编辑  收藏  举报