|
一.在线查看执行计划表. E6 ?) }; |8 S, M4 _4 G$ C
1 e5 }) B# y! M- _& s
如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。 M2 K4 z: u- x0 Y+ s( s- w
3 e2 H+ V) P. g% k 1.explain plan9 p3 K( d4 z! s) Z; E. M
7 x) x' y' ?# O' D
for( z6 j2 a, |1 y$ T; P% i3 ?
" z4 G2 ~, H1 J! i+ ]' @6 a7 u select * from ......
5 e3 R6 c) V$ S* G8 h5 s
; h# H3 D! W0 P 2.select * from table(DBMS_XPLAN.Display);
4 A8 q* r1 o, l0 n0 S2 o
9 {' d3 S$ k, D 二.使用oracle第三方工具:* ^1 [. [, B/ \6 B
Y/ h5 V( g6 H4 n+ p$ f plsql developer(F5)
7 o4 j1 k" S' n! r/ a1 n4 w
! p) L' h8 q0 ]- ^# O7 s Toad (Ctrl+E)
: A+ F7 B L# H1 [% Y
' q( T8 z) T4 F) R( z- x2 X 三.使用SQL*PLUS:
2 {% C; F0 B6 P, I( W+ q b
7 L% ^% [$ r, b8 x: U6 |- M4 U 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。& K$ s; a2 n- D
* h4 C" j7 {1 v/ q* ?9 J 如果PLUSTRACE角色不存在,执行
* N0 M2 \/ [0 t6 v4 {, ^8 ^+ T/ ~* U, [- c5 T1 U" [: L1 U' c
$ORACLE_HOME/sqlplus/admin/plustrce.sql/ ]& q8 [; d+ w) P6 u0 S+ E
v8 K4 r. Q. Q; R 1.sqlplus / as sysdba8 [! Z: R$ f+ O. ~% a& X
% y$ b3 a- Q3 ^: `/ z% O
set autotrace on;
+ K1 E# w& z8 D
$ E. l+ Z! N/ k) e 关于Autotrace几个常用选项的说明:6 Q# p4 A" M- Z% d; l. Q9 y
, f8 B2 O1 Y: U0 ]- p SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式+ }. s- @& |. }- o" O: u/ h& ~
- t% _1 d6 m4 O: S6 i
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
0 I5 C* T" x7 A- D) w0 S* x' {9 w& S& A2 Z
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
! c1 J( w& x/ j$ x
0 l+ ]+ k4 J+ G! @: _. Q& c% P7 E SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
- Y9 M1 L, h8 [6 p8 _* c( j
) g& ^& k L% \/ j SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
4 c s# U: l0 g! y5 L2 S' ]6 m! a6 i& A
2.执行sql
& S# N) @( {* `0 V# T& t! l& ?9 k4 @: s4 \. D% v; S3 N' B9 z) B. g5 P n6 F
四.sql trace
! V9 a2 M; R) S5 a- p
* [2 |& d! r8 |, Y8 v 1.alter session set sql_trace=true;
' C$ q9 d0 P! M& P; w
6 s$ R# g+ R% `2 H! I- x A a' J 2.执行sql- I. ~3 H6 U& m- [
# a: v. c' N0 v0 n
3.alter session set sql_trace=false;
6 H. W0 l. Q" n! J0 g d. ~8 P9 Q' h, x+ a9 V1 L; f9 H. M
4.查看相应的sql trace文件。
2 z9 c$ G* U1 [0 ^0 w
1 a/ W# w* W9 w, L8 E, Q+ a 五.诊断事件(10046)
) J) v/ P9 V5 U2 b, y: x& G0 m' i2 P* _9 u( Y3 U# t: z2 O
1.alter session set events '10046 trace name context forever,level 12';4 Q; ]% [' V+ b4 O1 v8 _2 W; z
% |# A- n1 d# c* E
2.执行sql4 x! L, O @: v9 {
5 W! g. I' R7 ~" h 3.alter session set events '10046 trace name context off';
; m# F3 { j9 w& M9 l. r; s5 U8 y" u7 _3 q0 g$ K* Z
3.查看相应的sql trace文件。. c* @$ A- @. Q4 K1 [" l
* Q7 F* S- [9 e9 B$ |/ T [
可利用TKPROF工具查看跟踪文件
% O @/ i: ^1 m1 A P: D2 A7 \# N* o6 o C% G" [9 l$ w% {/ l
TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。
8 s) y. ]- S+ G% _- e
+ F& u( U+ w! ]/ l1 E6 J4 R TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。
) ]) l4 X# q* J* U3 C1 ]' O! P/ i' ~" M# g0 N7 S
下面简单描述一下TKPROF工具的使用步骤:9 j# f8 B5 k' S& [
; E6 n! w- T% c% W5 {* q% O
1、在session级别设置sql_trace=true. d% u2 |2 v: y1 F* j
; x- `: N0 J! C; _/ [; s3 r$ `: _ alter">sys@ORCL>alter session set sql_trace=true;& v/ k; r. {( V' k) n
5 B; H. A' q+ _8 x7 }" E u9 l Session altered.
0 d) c( J( [ ]) T& u* O
# |4 C* Y& g6 I 如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:
1 r- r# n: A* X( ?2 i7 C/ w/ f9 f& w7 I. _1 ~
sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
l. E' B' ]; j3 K* W0 @) g0 c5 c
2、指定一下生成的trace文件的名字,便于查找:/ B/ K$ L( s; o6 I9 e) @
( X) [3 Y' a0 }7 I- z* y alter">sys@ORCL>alter session set trace file_identifier='yourname';' m4 y. d& n E4 G5 h( N) ]# h
M$ Z! I6 A) B8 E
3、执行SQL语句。
+ `1 w8 u! y9 x; q: B
+ {9 p3 x) n7 u 4、利用TKPROF工具格式化输出的trace 文件:% Q/ m5 y* a6 H5 p" J6 u
6 P+ M3 Y! F* ~1 g# W6 N. M+ x
[oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
C1 x' g y) N4 B+ P) @( C# ~$ R7 O# a" @# }* w
5、查看生成的文件再设置sql_trace=false:. s. {! f# [* F; g
: L* i% o& y" q) z8 D alter">sys@ORCL>alter session set sql_trace=false; |
|