10053是用来理解CBO工作机制的工具,如果辅以10046事件查看执行计划,那么整个sql语句从解析到执行的过程都一目了然。
--打开
alter session set events '10053 trace name context forever,level 2';
--关闭
alter session set events '10053 trace name context off';
10046event的追踪级别大致有:
level 1:跟踪sql语句,包括解析、执行、提取、提交和回滚等。
level 4:包括变量的详细信息
level 8:包括等待事件
level 12:包括绑定变量与等待事件
其中,level 1相当于打开了sql_trace
select sid, SERIAL#,username from v$session;--267,996是sid, SERIAL#
使用sql_trace
SQL> alter session set sql_trace=true; --开启会话级别的sql_trace
SQL> execute dbms_system.set_sql_trace_in_session(267,996,true);
PL/SQL 过程已成功完成。 -- 启动其他会话的SQL_TRACE
SQL> alter system set sql_trace=false; --关闭系统级别的sql_trace
SQL> alter session set sql_trace=false; --关闭会话级别的sql_trace
SQL> execute dbms_system.set_sql_trace_in_session(267,996,false); -- 关闭其他会话的SQL_TRACE
要知道trace的文件名是哪个,可以加后缀:
alter session set tracefile_identifier='look for me';
使用10046 事件跟踪
SQL> alter session set tracefile_identifier='gg_test';
SQL> alter session set events '10046 trace name context forever ,level 12' ; 会话已更改。--开启本会话的10046事件
SQL> exec dbms_monitor.session_trace_enable(267,996,waits=>true,binds=>true); -- 开启其他会话的10046事件
SQL> alter session set events '10046 trace name context off' ;--关闭本会话的10046事件
SQL> exec dbms_monitor.session_trace_disable(267,996);-- 关闭其他会话的10046事件
往往trace的文件看不懂,需要Tkprof转一下:
D:\oracle\product\10.2.0\admin\orcl\udump>tkprof orcl_ora_3612.trc 3612.txt sys=no AGGREGATE=no
AGGREGATE决定是否将多个执行相同语句分析的结果合并。
sys=no 不显示系统产生的sql.