使用10046跟踪sql语句

--1. 在全局设置
在参数文件中增加:
event="10046 trace name context forever,level 12" 
此设置对所有用户的所有进程生效、包括后台进程.(基本不用,会消耗大量系统资源)
--2. 对当前session设置
通过alter session的方式修改,需要alter session的系统权限: 
SQL> alter session set events '10046 trace name context forever,level n';
level 1等同于sql_trace的功能
level 4在level 1的基础上增加了绑定变量的信息
level 8在level 1的基础上增加等待事件的信息
level 12等于level 4+level 8,即同事收集绑定变量和等待事件
设置跟踪文件标示符
alter session set tracefile_identifier=xxx.trc;
文件生成目录
在Oracle 10g中,SQL_TRACE生成的trace文件默认路径是:$ORACLE_BASE/admin/SID/udump.  
到了11g,trace 默认路径在:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace目录下. 
select * from v$diag_info;
使用10046 事件跟踪其他会话
 开启:exec dbms_monitor.session_trace_enable(1036,8989,waits=>true,binds=>true); 
 关闭:exec dbms_monitor.session_trace_disable(1036,8989); 
开启:exec sys.dbms_system.set_sql_trace_in_session(1036,8989,true); 
关闭:exec sys.dbms_system.set_sql_trace_in_session(1036,8989,false);
1,SET AUTO TRACE (EXPLAIN PLAN)
--输出优化器的产生的执行计划(估算值)
2,SQL_TRACE
– SQL实际的执行情况
• 消耗的资源
• 产生的等待事件
• 数据的处理过程
trace文件详解
--parsing in cursor 部分
len  =========>被分析sql的长度
dep  =========>产生递归sql的深度
uid  =========>user id
otc  =========> oracle command type命令类型
lid  =========>私有用户的id
tim  =========>时间戳
hv  =========> hash value
ad  =========>sql address
--stats 部分
id  =========>执行计划的行源号
cnt  =========>当前执行返回的行数
pid  =========>当前行源号的父号
obj  =========>当前操作的对象id
op  =========>当前行源的数据访问操作
--parse, exec, fetch部分
c   =========>消耗的cpu时间
e  =========>elapesd time的操作的用时
p  =========>physical reads物理读的次数
cr  =========>consistent reads一致性方式读取的数据块
cu  =========>current方式读取的数据块
mis  =========>cursor miss incache硬分析的次数
r  =========>rows处理的行数
dep  =========>depth递归sql的深度
og  =========>optimizer goal优化器模式
tim  =========>timestamp 时间戳
注意:
如果sql语句使用dblink,则无法跟踪到远程机器的trace信息。
当sql语句出现性能问题时,可以采取10046事件跟踪。如果是数据库性能遇到瓶颈则采取awr报告进行分析。

请使用浏览器的分享功能分享到微信等