最近因为项目上出现了PL/SQL性能的问题,因此需要对已经开发好的并发程序进行调优的工作。调优有个很重要的步骤就是获取并发程序的trace file,从而才能知道是哪一段SQL出现了问题。
下面就针对如何获取并发程序的trace file做个归纳:
1.在并发程序注册页面启动跟踪功能;

2.提交并发,待并发跑完之后获取trace ID,可以用如下代码来完成:
-
SELECT \'Request id: \' || request_id,
-
\'Trace id: \' || oracle_process_id,
-
\'Trace Flag: \' || req.enable_trace,
-
\'Trace Name: \' || dest.value || \'/\' || lower(dbnm.value) || \'_ora_\' ||
-
oracle_process_id || \'.trc\',
-
--\'Prog. Name: \'||prog.user_concurrent_program_name,
-
\'File Name: \' || execname.execution_file_name ||
-
execname.subroutine_name,
-
\'Status : \' || decode (phase_code, \'R\', \'Running\') || \'-\' ||
-
decode(status_code, \'R\' , \'Normal\'),
-
\'SID Serial: \' || ses.sid || \',\' || ses.serial#,
-
\'Module : \' || ses.module
-
FROM apps.fnd_concurrent_requests req,
-
v$session ses,
-
v$process proc,
-
v$parameter dest,
-
v$parameter dbnm,
-
apps.fnd_concurrent_programs_vl prog,
-
apps.fnd_executables execname
-
WHERE req.request_id = &request
-
AND req.oracle_process_id = proc.spid(+)
-
AND proc.addr = ses.paddr(+)
-
AND dest.name = \'user_dump_dest\'
-
AND dbnm.name = \'db_name\'
-
AND req.concurrent_program_id = prog.concurrent_program_id
-
AND req.program_application_id = prog.application_id
-
AND prog.application_id = execname.application_id
-
AND prog.executable_id = execname.executable_id;
在sql执行完获取Trace Name列的值,进入对应目录下:

3.利用tkprof文件解析trc文件:

4.用Filezilla等FTP工具登陆到对应的目录下,并将生成的tkp文件down到本地

5.用记事本或者Notepad++等文档编辑工具打开下载下来的tkp文件:

最后的事情,那就是一句句的查看sql,看具体哪一段sql消耗比较大。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16832682/viewspace-1249765/
,如需转载,请注明出处,否则将追究法律责任。