|
一.在线查看执行计划表
8 q0 M! o, w' w7 } |5 ~* g. ?5 j/ O+ u$ c# w) Y" C( h
如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。 X: Y: {% J9 d3 [1 f5 I9 Q0 B* j
- l8 F5 [! B9 Z
1.explain plan
) R; [+ y+ b1 {
, X" q: w) A9 U for. X, O3 W# j3 }# G" A
; Y1 U& j9 C0 `: W6 \! o1 Z
select * from ....... `0 X( G8 }: F9 N# M c
5 k1 o' {, d2 ~
2.select * from table(DBMS_XPLAN.Display);
{* y* {# [6 Q* x0 L" G: r% E% e! @
二.使用oracle第三方工具:# @; Y) _5 N* u
5 ^% C1 s/ m# |" G. `! j- D plsql developer(F5)9 {! x, t6 p3 O! b5 z% M
: a! R, q2 f) X Y; t
Toad (Ctrl+E)
) X( D1 K, v ?9 E" n$ q& R3 ]( k5 J" I, V# y
三.使用SQL*PLUS:
( T! d3 ], @1 F. m D5 G* F1 b5 H9 F0 g6 B6 B8 ?# f9 S
如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。
" t& x: Z; M6 c2 K
8 W2 }) X! p! ]1 L 如果PLUSTRACE角色不存在,执行
_6 E7 a: j. A+ E( p8 e$ s
+ ~5 k1 t. a2 m $ORACLE_HOME/sqlplus/admin/plustrce.sql
; `/ K- A! Y! H; G, j, I$ _2 ?4 ]1 d" U# }4 M* t! B& V; g0 i
1.sqlplus / as sysdba4 i! h: h# C* \' q9 y P
3 ]+ L- S% p$ _- p
set autotrace on;6 F: v5 n; ]* t6 `- k" u
1 D9 \/ r/ X9 J0 k 关于Autotrace几个常用选项的说明: }0 t8 i1 T/ C* s8 ]( `
( V1 A* B! T! x
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式7 ?) ?4 i9 D5 x1 G9 E- F; ?; Z! U
/ A5 g3 ]# f, `+ ]9 A o! H SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
# |, i! O% u7 ?& I1 J2 \
& y& ]5 z2 V1 F, C: O" G- G$ |% E1 R SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息6 b- b# l3 e, Q! }. \" i8 v
1 E: n1 H6 t1 p$ \" m: `* B" E4 F SET AUTOTRACE ON ----------------- 包含执行计划和统计信息1 V5 o! C; Q! a$ R ~' G
0 U8 m8 Y8 m2 b$ j3 k- l# [( O
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
4 B5 H4 o0 a5 I8 N6 J
/ m; @0 t/ A# `: u 2.执行sql
' N6 O/ N% Z9 ~" r' V- d
5 U% k9 y/ k: B 四.sql trace
' X7 c# L! p% i$ \; l" t! b5 X7 X. u& _8 z! ]& {7 v/ k' y
1.alter session set sql_trace=true;
' l& q5 r5 K% W0 ]5 l/ e8 ?4 q# P* W+ y3 o
2.执行sql- d' J7 D$ J5 f8 n/ D2 e; ]& J
2 O0 i3 r! h# [! b9 S b* @6 s5 U
3.alter session set sql_trace=false;9 [5 `4 \+ C. b j8 D
5 C- K4 K: Z' N* k4 v6 Z
4.查看相应的sql trace文件。
; W; @/ h) f( T7 {+ A/ J ~# Q* A( S
五.诊断事件(10046)
" F& T4 [! |$ j% T- t/ d i$ ?3 B$ M ?9 u4 V" \. k
1.alter session set events '10046 trace name context forever,level 12';2 `6 z# h: V3 C* c6 m7 ]- C# f7 h
1 j9 R9 ?& Q& S
2.执行sql
/ ^% G" H0 o% s
2 }) r; i4 B a" d8 l% ^1 i* n 3.alter session set events '10046 trace name context off';
' {& r; T1 I0 @6 |; x
0 P8 V) Q- b( ~4 L: a9 e4 v 3.查看相应的sql trace文件。
/ M R5 f( V, y) y& T: z& |# W$ [, u
可利用TKPROF工具查看跟踪文件
7 w- J/ w. G, w8 D% H& P. k i; ] Q8 M) S4 Q- U
TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。1 p: M, A/ v8 D( \8 x! u1 @
! H6 c# R/ `3 J8 M
TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。: o! F) o/ C6 q; Y
; P! ]7 r D+ W, V6 u 下面简单描述一下TKPROF工具的使用步骤:! l: w- z' j/ x5 V1 m& v
; i* z: O' W! k4 Q' f
1、在session级别设置sql_trace=true* R u; | Y; D
, m H% O' p6 y# \1 d! v
alter">sys@ORCL>alter session set sql_trace=true;
0 q+ X9 g( X5 g0 J6 }) h6 u3 d1 r u6 J2 P* J! g" p
Session altered.
( w- t$ ?% \ L) y8 J
" P: \" {, r9 {! z; w1 Y 如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:6 `2 b) ^5 P0 S) w# d$ J
1 a8 ~' z- Y$ H3 u4 v
sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);$ S9 l/ Q6 r5 W0 p$ @3 O- X
* H ^( ]% h4 Z. e' Y( |
2、指定一下生成的trace文件的名字,便于查找:
4 V Z9 U; _, e4 O' j
5 {' Y' G# q' P# {& H alter">sys@ORCL>alter session set trace file_identifier='yourname';7 K" R7 F$ |: e
. S6 B* V: F" S H! W' G& S& X
3、执行SQL语句。8 x2 U1 g/ M, O
. K% b" l5 y8 @+ ~' U& g5 s k4 X6 f 4、利用TKPROF工具格式化输出的trace 文件:
- P0 q" k4 A% G7 Z2 [0 H& X. S; g; e; j
[oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
( W$ Z5 F) o% a, D" f
) ~& i1 W- Q: C 5、查看生成的文件再设置sql_trace=false:
7 D- |& k9 j6 d4 n+ G q0 I4 {, u3 O- _. }3 b/ d, |' _
alter">sys@ORCL>alter session set sql_trace=false; |
|