--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报告进行分析。