在DBA诊断方法中,会话的跟踪是比较重要的一个部分。如何获取会话或者某些DML代码的执行计划成为SQL优化重要工具,下面是日常常用3三种跟踪方法,以及一些工具的使用。
1、AUTOTRACE功能适用:当前会话跟踪,当前屏幕输出。
功能:查看执行查询的运行计划和占用的资源,使用的比较频繁。
SET AUTOTRACE OFF -- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN -- AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON -- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY -- 同set autotrace on,但是不显示查询输出
2、SQL_TRACE(Oracle的辅助诊断工具)(1)全局使用
在pfile/spfile参数文件中指定: sql_trace =true
SQL> alter system set sql_trace = true;说明:全局开启SQL_TRACE会导致所有进程被跟踪,包括后台进程及所有用户进程,会导致比较严重的性能问题,所以最好不要开启此功能,默认关闭。
(2)当前会话使用:
SQL> alter session set timed_statistics = true;SQL> alter session set sql_trace = true;SQL>执行你的代码SQL> alter session set sql_trace = false;SQL> @gettrcname
(3)跟踪其他用户进程:
使用包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION进行跟踪,
前提是需要手动找到会话的sid,serial#,这个方法就不多陈述了。
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true)SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false)SQL> @gettrcname 3、10046事件
10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
10046事件可以设置以下四个级别:
1 -- 启用标准的SQL_TRACE功能,等价于sql_trace
4 -- Level 1 + 绑定值(bind values)
8 -- Level 1 + 等待事件跟踪
12 -- Level 1 + Level 4 + Level 8
(1)全局设置。
参数文件中添加:event="10046 trace name context forever,level 12"
(2)对当前session设置。
SQL> alter session set events '10046 trace name context forever'; SQL> alter session set events '10046 trace name context forever, level 8';SQL>执行你的代码SQL> alter session set events '10046 trace name context off';SQL> @gettrcname (3)对其他用户session设置(调用DBMS_SYSTEM.SET_EV系统包):。
SQL> exec dbms_system.set_ev(sid,serial#,10046,8,'user');SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'user');SQL> @gettrcname 4、TKPROF 进行格式化。跟踪完后使用TKPROF命令进行文件的格式化。
tkprof 5、runstats tom kyte写的测试工具用于比较代码执行计划的异同。
有兴趣的朋友可以下载代码下来尝试一下。
附:linux下gettrcname代码
SELECT a.VALUE
^X\t"T#b1Ep^#RK24070945 ||
b.symbol
U
Y}I}ja,B1N*qa\G24070945 || c.instance_name
ITPUB个人空间r7w!W P K q || '_ora_'
Ocg5^ NG)G;QFbZ24070945 || d.spid
ITPUB个人空间 a*Az}L || '.trc'
trace_file
ITPUB个人空间(r.H a"@@ { FROM
(SELECT VALUE
ITPUB个人空间;dd:]j(L
i8e FROM v$parameter
0gc1b/Ut24070945 WHERE NAME =
'user_dump_dest') a,
1A8T
w2y9q24070945 (SELECT SUBSTR (VALUE, -6, 1) symbol
ITPUB个人空间H0wV"A/j:bL FROM
v$parameter
ITPUB个人空间+DT*Ci)l8J
v WHERE NAME = 'user_dump_dest') b,
N GPa.Q(o24070945 (SELECT
instance_name
ITPUB个人空间.RnA:S[2cKh FROM
v$instance) c,
ITPUB个人空间&Li.y;X M
bGoh (SELECT spid
2j
g)a6X#j6_d24070945 FROM v$session s, v$process p, v$mystat
m
,j*M,s1i2|y:K+e9K24070945 WHERE s.paddr
= p.addr AND s.SID = m.SID AND m.statistic# = 0) d;
ITPUB个人空间S,u@U/_M7[!J
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24070945/viewspace-702223/
,如需转载,请注明出处,否则将追究法律责任。