|
一.在线查看执行计划表/ t1 y, L& l- N
- a9 A1 y. r) M- i5 a6 a( e
如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。9 _" q! j! M" ]+ I0 ?" h
, J% u" R, v) C) c- }
1.explain plan
# Q9 Y& X/ g4 t/ m$ A a
: s7 t# B4 }! r, Q for
" ~ {5 j k9 U' {2 ~/ h/ a
' f+ O7 S* q1 i$ y select * from ......
& V1 \8 D& P2 j8 M9 C7 B% S
: \2 }7 k; W" c* Q8 s 2.select * from table(DBMS_XPLAN.Display);% p& [* S$ v! y5 g
+ D5 ?3 `( ]4 Y& p: B' E 二.使用oracle第三方工具:
$ e* R+ z" S( s3 {* ]# @
/ N- s9 C0 N( [( D, q plsql developer(F5)6 `7 w& X( t: O! Q; O# Q
! L0 q4 i# N4 l( f* C" v) p% S Toad (Ctrl+E)
, `* s2 ~, D) b. c# r* }) x# m# x' [' i4 k
三.使用SQL*PLUS:
. v! [0 a' f, p
2 a4 Y8 s: u y, w 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。: ^1 H' N! U* f- e8 o
+ J. \3 r+ W9 y( h1 U# v. u/ p E
如果PLUSTRACE角色不存在,执行
2 h0 K. m4 i' c( R( f) C
: z7 V: q5 s7 ~5 U5 _4 s: E $ORACLE_HOME/sqlplus/admin/plustrce.sql. I& s$ [4 @- m- l* k8 |2 Q' u
0 H6 n' ?/ I3 [; V3 y
1.sqlplus / as sysdba# x& {' X) U5 S& O2 [( C# X
2 Y [7 @- I- I _* ^ { set autotrace on;
6 s" E8 h! W- S2 n( n0 g1 n; X: k
6 |; S% d* `# p1 A- A 关于Autotrace几个常用选项的说明:7 @$ a5 R1 O3 a6 o) K0 g
, S" U0 T- b7 \5 ^% z SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式6 S5 w. E4 g4 _+ Q
! T1 v9 o0 O4 h
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告$ q( {% }' B/ p& ~( ?. i: @* u2 z
* E$ E5 d8 K, _: g4 B
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息$ y E' n8 ]. b$ }1 K
# l, F. l" E: T% q5 v) W2 I
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
/ q- w1 P: J; _6 O- e8 ~* \ x/ r5 [+ T7 Q3 P" X1 \
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
, H" K1 P& j' m; N+ }3 j, N% i9 k4 F( O) [% W! `" O( Q' j
2.执行sql
) ~# d p8 U, M, Y. T
( e" u8 l% `% [- l3 c3 v! j; b/ N; { 四.sql trace5 [8 y r- d- d+ Z7 l8 H* j( r
( U* c3 [8 u* l8 b8 g. p0 o5 s' J 1.alter session set sql_trace=true;+ k; q0 K3 n5 l+ G1 w: Y
1 Y8 g5 K5 M5 X, c; j$ S 2.执行sql3 c2 m+ L1 p$ e+ ?
8 v# J' _# g7 P7 I1 b- b: a* b
3.alter session set sql_trace=false;" c; A: S" q" m
$ ]# W# c4 `. K8 ?- ]4 {, e 4.查看相应的sql trace文件。
: ^: ~* j: ^: E
! W5 t7 L2 o6 m% g6 h# A 五.诊断事件(10046)
: K; d. H1 u. Z8 p: K8 Z; T# e n# Y5 @" ?) a
1.alter session set events '10046 trace name context forever,level 12';, ]8 C/ f$ i% Q: n. J% x9 U! L
! a7 k' W2 g1 m' N, W+ ?$ d9 k
2.执行sql3 C( F) b& `, Z2 B$ Y
0 ]* K, e p: ` 3.alter session set events '10046 trace name context off';
6 g, a- f% E- t e* k' l
1 }) Q& i6 R9 S7 `# o" j 3.查看相应的sql trace文件。
( r# x! H7 ^3 c# _% g/ w3 @, p0 D+ G, |
可利用TKPROF工具查看跟踪文件6 x M! O5 W. r, w
( n/ d3 Q7 A& _! e* X; c TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。- _' U: V1 X" ]
# k1 Q7 ^3 U# m& }, S: U TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。" ]9 V h! J5 S1 `
! F# |" g7 [$ C: q
下面简单描述一下TKPROF工具的使用步骤:
/ \% C: {8 u, r* _, M5 T/ V0 Z$ q4 ^2 F9 X& ~
1、在session级别设置sql_trace=true
: P# r/ n* W. S2 n1 G! y
/ l+ p7 X6 T" d" V5 S alter">sys@ORCL>alter session set sql_trace=true;
+ @3 M+ g5 d: E& _8 r' q$ z' {
4 t3 |9 e; S. k2 L) e Session altered." d4 Q' E2 t4 \0 S1 |0 n2 J
3 J7 G9 X' ^: e 如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:
2 P) F ?# H' A9 [2 ~! f8 J, P9 @0 S% s+ b7 c3 k
sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
) \) t7 T% L+ H, f0 P, f s) z, V6 E. t
, B9 |0 k8 B% |0 [ _% [! F: g: B 2、指定一下生成的trace文件的名字,便于查找:
% K! w4 j) Z' s
: T2 w8 D! N* j' [) g& K J6 R alter">sys@ORCL>alter session set trace file_identifier='yourname';
& s: k0 E: `, E: n' w, w k6 t: z8 T b" j* \# f! D
3、执行SQL语句。
P) f" h3 n$ `( a" p8 O } d1 f7 z& l* [; a
4、利用TKPROF工具格式化输出的trace 文件:3 ?* N: I! d8 h: L) v7 B; }
% p3 d* ?: ^0 i% K& F; n [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
' ~% g1 ^; U3 f' z, ?7 B) F8 F7 x' N3 l% [4 z) N
5、查看生成的文件再设置sql_trace=false:' |3 _. G8 }( U5 `+ a
* B3 s. g2 i) j
alter">sys@ORCL>alter session set sql_trace=false; |
|