1.10046 是用来干嘛的? 跟踪一个sql的,看一个sql的等待事件。
2. 什么时候才要用 10046 呢? (不能抛弃 10046)
①.查看sql等待事件;
②.执行计划是真的;
③.发现 隐含的递归调用的sql;(内部的sql)
select xxx from test where id=1000; ---1秒
delete test where id=1000 ---1分钟
④.研究数据库
3.用10046跟踪一个sql的方法
方法一:
SQL> oradebug setmypid
SQL> alter session set events '10046 trace name context forever ,level 12' ; ++开启当前会话的跟踪
SQL> select * from emp; ++执行需要跟踪的sql
SQL> alter session set events '10046 trace name context off' ; ++关闭当前回环的跟踪
SQL> oradebug tracefile_name
方法二:
SQL> oradebug setmypid /setorapid/setospid/setpname
SQL> oradebug event 10046 trace name context forever,lever n;
SQL> select * from emp;
SQL> oradebug event 10046 trace name context off;
SQL> oradebug tracefile_name
要想 10046 trace 出来有等待事件必须 清空buffer cache
alter system flush buffer_cache;
二、10053 trace
10053 是用来干嘛的?
1.研究cbo(为啥走索引,为啥走全表扫描)看最终sql的 final怎么走的;
2.10053 可以用来检查 cbo 的bug, cbo的 新特征
用1005跟踪一个sql的方法
SQL> oradebug setmypid
SQL> alter session set events='10053 trace name context forever,level 1';
SQL> select * from emp;
SQL> alter session set events '10053 trace name context off';
SQL> oradebug tracefile_name