中国喷墨论坛-喷墨技术应用-数码影像-数码印刷-数码印花

标题: 多种方法查看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

" y8 P8 R, o8 e$ Y0 G7 w( b3 |, L  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。
4 ?3 t4 y/ \: _$ |" S* C* [; Y% Q# f
  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。+ P3 c/ U' z: K5 M8 Z" Z3 N

& t' [- ]5 ?+ M: r2 l1 u9 Y  下面简单描述一下TKPROF工具的使用步骤:  f/ `: Z, r5 p8 X
/ F; g1 D5 i: \9 p! J
  1、在session级别设置sql_trace=true. A# R; ]7 u/ R! f1 Q$ v

8 U5 k) m  m* |: z, o3 H  alter">sys@ORCL>alter session set sql_trace=true;9 p/ @$ N. s# H( y4 A, r) i8 C
/ P* [+ j( P' w- W* ~  M' |
  Session altered.
" T; Z9 z. [: `" Q; ?( N9 O/ C0 A, L6 L; h
  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:( a1 y$ n5 n! X  N8 e8 q. e
& k- R2 r4 k2 E9 V6 u) a" R
  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);/ E$ S( {9 R, f2 U, C$ Y2 r$ S

! E9 V) |; O; [: k- O  2、指定一下生成的trace文件的名字,便于查找:+ ^' v% ^1 g5 ^8 l: T  Y# B
) A. w! C. q. p/ A, Z9 [
  alter">sys@ORCL>alter session set trace file_identifier='yourname';- a# W) P+ ^0 ^1 r; r: D2 p. Z  E
1 a2 K6 y' W& R1 |
  3、执行SQL语句。: v7 J  j/ v% r# P" u; z

- r& ~/ c2 l6 \5 x0 e* Y" q: [  4、利用TKPROF工具格式化输出的trace 文件:
* m  [  K" p: b3 ^. r) U6 H3 y% ?4 q2 W
  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
/ W( b2 |; \1 j! O9 ~: G5 H2 J( J4 X! q: ~. h" B. _" x
  5、查看生成的文件再设置sql_trace=false:
1 ^  Y' g, v! z$ j7 |& K
' g# B" _/ Z- y- d1 q9 ]; G  alter">sys@ORCL>alter session set sql_trace=false;
作者: 炽火重生    时间: 2012-5-18 16:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 夜神灬軒    时间: 2012-5-18 17:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 巴黎橱窗    时间: 2012-5-18 19:23
只是路过看帖就要回帖。




欢迎光临 中国喷墨论坛-喷墨技术应用-数码影像-数码印刷-数码印花 (http://inknet.cn/bbs/) Powered by Discuz! X3.1