SQL Trace
SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。不过我们这里主要用于描述SQL的执行过程的trace输出。 – SQL是如何操作数据的。 – SQL执行过程中产生了那些等待时间。 – SQL执行中消耗了多少资源。 – SQL的实际执行计划。 – SQL产生的递归语句。
10046:
一般来说, 使用 10046 事件得到 sql 执行计划的步骤如下: 1)激活当前 session 10046 事件 2)在当前 session 中执行 sql 语句 3)关闭当前 session 10046 事件 按照收集信息的内容分为以下等级: 1) Level 0: 停用sql跟踪,相当于SQL_TRACE=FALSE 2) Level 1:标准SQL跟踪,相当于SQL_TRACE=TRUE 3) Level 4:在level1d的基础上增加绑定变量的信息 4) Level 8: 在level1d的基础上增加等待事件的信息 5) Level 12: 在level1d的基础上增加绑定变量和等待事件的信息 命令如下: alter session set events '10046 trace name context forever,level n'; --1、10046跟踪当前会话 alter session set tracefile_identifier='event 10046'; alter session set events '10046 trace name context forever, level 12'; run your sql; alter session set events '10046 trace name context off'; --2、10046跟踪其他会话 --获取相关会话的sid,sieral#后执行以下命令跟踪 exec dbms_system.set_ev(sid,serial#,10046,12,'username');
oradebug查看SQL_TRACE文件:
如果会话已经运行了,可以用oradebug --1、查看当前会话trace文件 oradebug setmypid oradebug tracefile_name --查看trace文件名及位置 --2、查看其他会话trace文件 select s.sql_trace,s.sql_trace_waits,s.sql_trace_binds,traceid,tracefile from v$session s join v$process p on (p.addr=s.paddr) where s.sid=&sid and s.serial#=&serial; --3、解析trace文件 tkprof /home/oracle/nwppdb_ora_21793.trc out.txt aggregate=yes sys=no waits=yes sort=fchela
systemstate dump:
sqlplus -prelim / as sysdba oradebug setmypid oradebug unlimit; oradebug dump systemstate 266; --wait for 1 min oradebug dump systemstate 266; --wait for 1 min oradebug dump systemstate 266; oradebug tracefile_name;
Hanganalyze:
oradebug setmypid oradebug unlimit; oradebug dump hanganalyze 3 --wait for 1 min oradebug dump hanganalyze 3 --wait for 1 min oradebug dump hanganalyze 3 oradebug tracefile_name;