在使用Oracle数据库的过程中,我们经常会遇到比较不同方案的性能问题,有时仅仅是比较2条不同写法的SQL语句,而有时,则需要比较两个PL/SQL块的执行效率,或者是两个不同的应用程序.
一.准备工作:
1.1 打开TIME_STATISTICS
SHOW PARAMETER TIME_STATISTICS;
ALTER SYSTEM SET TIME_STATISTICS=TRUE;
1.2 取消日志文件的大小限制
SHOW PARAMETER MAX_DUMP_FILE_SIZE;
ALTER SYSTEM SET MAX_DUMP_FILE_SIZE=unlimited;
1.3 建立执行计划表plan_table
desc plan_table;
@?/rdbms/admin/utlxplan.sql
二.生成并比较2个不同session的跟踪文件.
2.1 找出需要跟踪的session的sid和serial#
select sid,serial#,username,osuser,program,machine from v$session where username is not null;
2.2 开始跟踪
exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
2.3 停止跟踪
exec dbms_system.set_sql_trace_in_session(sid,serial#,false);
三.使用10046事件进行跟踪
3.1 找出需要跟踪的session的sid和serial#
select sid,serial#,username,osuser,program,machine from v$session where username is not null;
3.2 开始跟踪
exec dbms_system.set_ev(sid,serial#,10046,12,'leng');
3.3 停止跟踪
exec dbms_system.set_ev(sid,serial#,10046,0,'leng');
四.生成报告
4.1 找出trace文件的位置.
select tracefile from v$process where addr in(select paddr from v$session where sid=&sid);
4.2 生成日志文件
TKPROF tracefile tracefile.out