标题: 多种方法查看Oracle SQL执行计划 [打印本页] 作者: 窝窝更健康 时间: 2012-5-17 17:19 标题: 多种方法查看Oracle SQL执行计划 一.在线查看执行计划表/ r( A+ J. V& [ W
$ T0 c% U) T' F8 h 如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。 6 f# Z5 K+ X' x9 |8 u / W' k3 J. n$ \' G3 j1 R 1.explain plan 6 ~' ?, |$ P& z" Q. i 6 h5 t* U: j+ t7 D for1 @2 c9 I8 Z9 k# T
1 R" ]2 S& X! K& G( o- H
select * from ...... 9 y9 j& T' s# o 5 R8 V" R7 ]) |4 Z 2.select * from table(DBMS_XPLAN.Display); 6 q- e, `' }3 B7 s6 t& h5 { % n) B6 Q9 W# X9 z" X9 X# O 二.使用oracle第三方工具: 8 g# n8 P) C4 @ t+ \) U7 A `. A+ e
plsql developer(F5)) {4 J9 y+ p3 v# i. \
" W8 S4 u1 k$ E8 a1 c Toad (Ctrl+E) 6 @ R7 k [; k3 N* O3 C5 s) b: g5 F
三.使用SQL*PLUS:9 I# B0 v6 b7 @$ h: y/ }3 q
7 @, {) X5 \+ s1 Z1 Q+ ]( y
如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。/ e3 `! K. l3 o3 H: u- n/ c
( ?9 Y! s W% t 如果PLUSTRACE角色不存在,执行5 A4 ]7 Z9 W. t; I( K6 m
7 k* G9 k, F& a4 {& d" l4 A* b) D6 k6 C $ORACLE_HOME/sqlplus/admin/plustrce.sql 9 ^! Q) j' u+ M- f 8 {9 I! K- a" p 1.sqlplus / as sysdba' o+ x- O+ |$ A% V
# a$ N* P: E$ k/ Q; Z
set autotrace on; ! G; R S; t& G6 V% q) f# q& {: d+ m3 L4 \" |# M; ?) D
关于Autotrace几个常用选项的说明:! _* Z, |8 W- i: S" o ~1 D5 l- _
3 ~5 I$ w% b9 k1 \5 d6 G9 n SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式( |% t/ M+ g- _7 N
* _; e# y6 p& R9 z SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告# B9 w+ A: H4 W. m; g
- |) m! K4 ~. I5 ?0 e! e
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息& L0 R! {4 E0 {, A
: M& h4 x5 ^, [: X5 m% j1 I SET AUTOTRACE ON ----------------- 包含执行计划和统计信息! k0 H. Y' w2 Y& {1 R6 w- y
0 J( T0 F N" t F# Y1 H
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询 5 M, U( A4 ~) V, X1 U/ D ( Q& a6 P" z% x( t+ s' Q8 n 2.执行sql+ V8 E- h9 B( |( c6 d
* p" `$ p4 F) Y2 Z6 H/ y
四.sql trace% Q6 d" [ I6 T8 B5 S/ d7 ~
& i9 u7 X# Q7 D# g" Z6 t/ ~9 I- d5 [ 1.alter session set sql_trace=true;7 m8 [1 D( H3 Z: c" i1 F
* ~0 t `( M& R8 p% @4 G' O% _
2.执行sql 7 a( Z4 d" }. c' H 7 z/ X E3 P5 z 3.alter session set sql_trace=false;. ~; V" k( t5 a4 @$ ?
9 E* [( O: f0 f( C* z 4.查看相应的sql trace文件。 2 J3 |5 E9 [+ t$ F, L: J 9 b H u. v4 U2 C 五.诊断事件(10046) 8 B# H0 s( x3 d6 N' j& n5 |1 d" } & _) o5 X+ d, S( g5 _$ Y 1.alter session set events '10046 trace name context forever,level 12';+ J- H. s1 T1 r- l( S" Q
; N: t0 s5 @$ {) j+ [ b# F
2.执行sql & E# ~$ }; e) p5 L/ i: I4 x c. H( X) s/ d5 |2 Y5 x
3.alter session set events '10046 trace name context off'; 2 Q8 t2 c" R) l& ?6 H9 d) Q9 c9 c9 E) s4 g9 I8 T
3.查看相应的sql trace文件。 , t8 {( |: V, v# q( N5 W- C D( h8 {! [2 @2 E7 l/ m
可利用TKPROF工具查看跟踪文件( Q# o, A8 x( R