1.功能
10046解析sql语句的运行状态,包括parse/fetch/execute三个阶段中遇到的等待事件、消耗的物理读和逻辑读、cpu时间、执行计划等
可以跟踪应用程序所执行的sql语句,10046事件记录SQL如何运行,而10053记录优化器为什么为这个SQL选择某个执行计划。
① 0级:SQL_TRACE=FASLE 停止sql跟踪
② 1级:SQL_TRACE=TRUE 标准sql跟踪
③ 4级:1级+绑定变量
④ 8级:4级+等待事件
⑤ 12级:4级+8级
2.设置10046事件
必须具有alter session权限
追踪文件路径:show parameter user_dump_dest
session 级别: alter session set events '10046 trace name context forever,level 4';
system 级别 : alter system set events ’10046 trace name context forever,level 4’;
关闭用户跟踪 : alter session set events '10046 trace name context off';
设置标记:alter session set tracefile_identifier='mytrace';
3.使用oradebug
设置非本会话的跟踪需要采用oradebug
--用如下语句找出要跟踪的spid
select * from v$session a where audsid = userenv('sessionid'); --查询当前的sessionid
select s.USERNAME,
s.OSUSER,
s.SID,
s.PADDR,
s.PROCESS,
p.spid os_process_id,
p.pid oracle_process_id
from v$session s, v$process p
where s.paddr = p.addr
and s.username = upper('SYS')
and s.SID = 160;
--设置跟踪进程id。
oradebug setospid 5672或
oradebug setorapid 15
--设置跟踪文件大小无限制
oradebug unlimit;
--设置跟踪,级别8
oradebug event 10046 trace name context forever,level 8;
--查询跟踪级别
oradebug eventdump session
--关闭跟踪
oradebug event 10046 trace name context off;
获取跟踪文件的位置
1)oradebug获取跟踪文件
--使用oradebug获取本会话跟踪文件位置
SQL> oradebug setmypid
SQL> oradebug tracefile_name
--获取任意会话跟踪文件位置
SQL> oradebug setospid 8916
SQL> oradebug tracefile_name
2)sql获取跟踪文件
--sql查看当前session跟踪文件位置
select d.value || '\' || lower(rtrim(i.instance, chr(0))) || '_ora_' ||
p.spid || '.trc' trace_file_name
from (select p.spid
from v$mystat m, v$session s, v$process p
where m.statistic# = 1
and s.sid = m.sid
and p.addr = s.paddr) p,
(select t.instance
from v$thread t, v$parameter v
where v.name = 'thread'
and (v.value = 0 or t.thread# = to_number(v.value))) i,
(select value from v$parameter where name = 'user_dump_dest') d;
4.tkprof翻译trace文件
tkprof bom_ora_8916.trc 8916.trc
cr:逻辑读,内存查找数据。
pr:物理读,数据文件读取数据。
time:耗费时间
card:实际返回结果集的行数。
pw:物理写
同时也可以看到执行计划,对象ID,解析调用执行情况,SQL_ID,SQL_HASH_VALUE,SQL_TEXT;
|