|
一.在线查看执行计划表2 Z1 G3 p5 O! c
# k& Y* `' z/ k$ f' _
如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。2 \* r, j8 T% O) _: m* F
& M% A; U/ S: b3 U9 E S2 [
1.explain plan# z' i. Z; n# f! e' D o
" v) i" ?' t! N& L5 S+ k
for
" b; G& R$ ]* A2 U% C# E1 O* L. U6 H& F7 r
select * from ......; s9 V9 I ?: J2 L" k. i
* j2 {3 ~3 x! z5 j1 u" h( Z" y
2.select * from table(DBMS_XPLAN.Display);
7 W' N( f( a) \$ b% W
$ {' i$ c& e1 ^7 d" {5 _; j 二.使用oracle第三方工具:
, P3 V, Z; R6 ?! M
6 |6 C& i1 a: [0 o plsql developer(F5)
! K& V' E( R! E% B* u' E
" b) S4 E/ J) ` Toad (Ctrl+E)
/ ?1 u) k: W6 I- r" ]$ E4 M
" v+ \3 [& y- X/ L* J: f 三.使用SQL*PLUS:
/ F v4 E I7 E
* f4 N% A) Q8 r7 W" _7 x 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。
$ _0 {. }( _* e/ D! i% k# P- G6 E! w# \9 u
如果PLUSTRACE角色不存在,执行( M8 g S( l- Z* o3 s' L, ?
" I9 o3 P- n4 J
$ORACLE_HOME/sqlplus/admin/plustrce.sql
+ _9 R! y; T" Q3 S
3 [6 D7 t- `8 r3 Z& J 1.sqlplus / as sysdba' |7 s0 e: G5 T& U$ d
! t! h8 Y, ]0 p2 c) C6 q( P$ e% Q% \
set autotrace on;
3 A" G+ j/ Y$ _
2 C* ]: x2 b4 C) v: k 关于Autotrace几个常用选项的说明:/ Z- @ m- E" n# P1 w; ~8 M
% b7 y8 S; @8 B) a [) ` SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式. e' ^4 i% T/ v8 ?. w b+ s
0 S/ D! \# T$ N1 C, Q9 U SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告0 r, m. }5 ~6 Z" f" j/ |" U: D
9 v9 R2 V: _6 w SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息0 b$ T+ F; W' k* O/ H Y3 W
2 C& \1 d! |# v3 y0 p+ n SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
0 g5 W( f$ Y* r8 I m4 ]! s* z0 _7 R
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
; n5 H( Q: w9 @) j! R# ?: K o. I
! S3 R. L( }- p: N3 j1 ] 2.执行sql
9 d( n7 p6 N; E2 H& ]! V
+ J0 H4 d0 E ?+ E r 四.sql trace/ g7 v9 @) ^9 _4 p; A0 h
4 L* }9 q8 L' N" M- ^! T 1.alter session set sql_trace=true;
# P- A2 H4 E. z/ \# K1 C
5 N6 m+ `# J& A$ p( f 2.执行sql! E8 b$ c9 O' P# `' h) ]
5 ~/ |. u; e- k7 c
3.alter session set sql_trace=false;9 B- h6 ]# n1 ]4 b W2 m
) z3 v0 b5 ^+ p7 @* ?' O/ Z' d
4.查看相应的sql trace文件。6 D# ~9 u5 |' l: k: }! I
4 C" k* P3 [ R 五.诊断事件(10046)& v2 H% B+ [+ w
* f% H4 u% g9 I) ` 1.alter session set events '10046 trace name context forever,level 12';
- ~# q9 p6 d1 D |$ m% z/ u6 R5 X, }( K. S, |6 i3 V
2.执行sql5 D) |1 o/ @# ]: E: s
- e* d$ s$ U, l# T
3.alter session set events '10046 trace name context off';# _9 P# u. N7 K% ?/ m
: f' n& e, B0 N" N) J
3.查看相应的sql trace文件。
+ i0 b- d' H3 ?$ [
( ]% R9 B w" Y2 \, L6 z7 C 可利用TKPROF工具查看跟踪文件
: u0 }2 w$ n8 c" _' s! k Z) [' r6 M7 @7 M [/ |; F L) ?
TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。* A4 E* E4 ^ T: o P) n
% {3 W3 y: ~! O0 R( C3 Y! W7 Z TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。
( z* n3 L5 s. p% D* o c$ n! S0 p% M7 t- I; z W
下面简单描述一下TKPROF工具的使用步骤:
/ D" s: |) _2 T% q- |) {3 p( K5 W! i) N5 d- h
1、在session级别设置sql_trace=true3 L8 B. T- Q g! S8 c5 R
( E$ V, A) x9 ]' F; ^ alter">sys@ORCL>alter session set sql_trace=true;8 ~) |1 |3 M5 u
& `" \# n( n. ^1 P' N6 [) s8 c2 S' h Session altered.
0 l. D K2 w& _' s2 ~- s+ z2 _3 B; G0 r3 M; f* O
如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:5 k6 M3 Z& U0 ~/ p- K
; P/ y& o' |# }3 y
sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);! U2 L- @3 N8 s/ u3 X; a
9 [% j8 k' {( I% V# k8 n( h" B
2、指定一下生成的trace文件的名字,便于查找:
7 _5 M* ?( @0 G( I3 S4 _
. D9 b v* L8 }7 g: Y6 M+ w: J" S6 ~ alter">sys@ORCL>alter session set trace file_identifier='yourname';5 a5 v" ]( \" d; T6 [
6 B3 r1 q( Y- N2 A+ S1 K6 h 3、执行SQL语句。. J* h9 o- N6 Q9 K5 R8 s0 P
0 J( @8 K) c: h 4、利用TKPROF工具格式化输出的trace 文件:
/ e- @, Y/ F4 x7 b- p9 U, @
( u9 l) i2 k& y5 n6 M, R6 J0 k [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela3 b2 W3 U9 J% O7 z e
* m! p, f" s1 U$ n6 F. u7 {* f
5、查看生成的文件再设置sql_trace=false:
- Q1 A- n( u, l) |9 z% _2 ~
7 w, |- p3 B9 V: h9 Q alter">sys@ORCL>alter session set sql_trace=false; |
|