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位置