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

标题: 多种方法查看Oracle SQL执行计划 [打印本页]

作者: 窝窝更健康    时间: 2012-5-17 17:19
标题: 多种方法查看Oracle SQL执行计划
一.在线查看执行计划表
$ b  U. q. d' W) Z; v+ o. V. `& T# v" L2 @! q; L
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。
! ~% a8 M  l% ~  e! u
' q$ p! k& b* d  1.explain plan
- A- P9 R: n* c) F- k( @( R' z- c- r2 q
  for
2 J3 v. Z" A4 `$ a! i$ u
6 M; @! d2 P. W7 A# r  select * from ......
8 d: C3 ~8 l4 X* ^! x! ?3 z5 M4 P& R# M' D2 k+ y5 w! M% M& @
  2.select * from table(DBMS_XPLAN.Display);9 ?  ?+ y. z* B4 L

, g7 ]  y# s" R# F/ l& E- j1 u. w  二.使用oracle第三方工具:- Q0 B! B1 N; S0 w
8 T: E1 r' L5 t% q7 Z
  plsql developer(F5)  H5 {1 P8 b" Z8 A/ r% {
' t& Y1 Z; m  Q1 _$ ]9 v2 r' ~
  Toad (Ctrl+E)- `2 ~# M  j+ q# G) r! ~/ d

* H2 T4 {  P( Z7 @+ Z3 e  三.使用SQL*PLUS:( f0 n8 ?1 f3 N& a
1 M- p% ]3 I* Z6 c' u/ r
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。9 p% h$ c9 c) K6 m% o6 F* ]" n7 s
. F, `4 K4 [( c* F$ _7 A
  如果PLUSTRACE角色不存在,执行0 w! U- a; o; ~9 a& x% W
, X6 z. q5 O# j3 s
  $ORACLE_HOME/sqlplus/admin/plustrce.sql
" W  f' I8 h. b5 s. Z3 W. w' \6 b( p, C
  1.sqlplus / as sysdba
2 V2 q( q- X3 G$ g6 S/ L1 t' Y5 m" V- ]3 e( {; R( k1 a0 P; N
  set autotrace on;
; Q; [8 s  p  t' l+ F, t( X( \  N% m% f! r3 I4 V0 k* }
  关于Autotrace几个常用选项的说明:7 o9 H2 x, y( q  J! J# c! V
5 z- v8 l- `, W( S7 f) n
  SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式. ^8 n1 R# f1 }) P0 S4 Q/ M

: a; f% S7 y3 ?  SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
$ y/ a* q; q! f: M: a) y: t
8 |) a" T0 I5 B' U, M  SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
0 ^* u& z: ^" S- U% x0 O
/ [1 r- q% W, ^/ k) N  SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
4 ^7 f3 Y5 W$ A9 l1 ?" X1 m7 w$ q; D+ q: O
  SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
, ]' ~, z' t; M% W6 y, j* Y5 E- J: K0 L8 H6 o# I0 q  h
  2.执行sql7 |2 x1 Y5 p. c) ~

8 _- o. F+ S" ^/ e2 o1 `9 n  四.sql trace$ L; U9 w4 z* L0 b7 U$ ^

2 g: T7 T+ g8 _& v  1.alter session set sql_trace=true;( \/ d- }; E3 h5 R8 b1 c

7 Z% Q& H0 J# x6 o, m( N; k) _, N. Z  2.执行sql
0 f2 p* @! G) X2 p, {/ o& W( D. r; Q: Q1 M9 E) e6 a/ h7 w
  3.alter session set sql_trace=false;
5 S% j$ H% s. E
. L7 |9 A1 u8 Q' t; N% i  4.查看相应的sql trace文件。2 A* e, `* t% K

; H5 a( |2 V' l' j  s; ^5 c/ w* k  五.诊断事件(10046)
+ m" g" U' K% P0 _  H) a
0 z' i; c5 Q0 i# l/ `! i, V3 b3 F/ a5 n  1.alter session set events '10046 trace name context forever,level 12';4 a) v5 @4 ?9 h

( V+ j0 C: p* ?5 l/ t  2.执行sql
7 v- ^% n' Z1 p; v$ K% T* F% @; y0 W6 ]. F7 S, v
  3.alter session set events '10046 trace name context off';
! B! X# X( ^# {+ Z0 M$ V' ?0 t8 j
( f1 g) U2 I3 w: b" P" o. w  3.查看相应的sql trace文件。
5 ], Z$ o4 v0 v: n5 f3 U& a7 _
  \/ n8 Z1 P8 n% T/ E  可利用TKPROF工具查看跟踪文件
" \0 `$ d0 K+ S3 c; B) J$ @7 J2 u; N
  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。
$ q4 V* P" b: d+ V9 n- g
' M/ Z. o+ I$ R4 D( H3 K  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。
. [" [7 _9 m( E6 E# M) k& y2 ^' n- U, H( k" g
  下面简单描述一下TKPROF工具的使用步骤:
4 t7 C* O6 A  Q0 M
% n' l' _/ q/ ]  1、在session级别设置sql_trace=true& E9 V. w4 ]8 y/ k

5 z  i. f2 S0 C% V9 H  alter">sys@ORCL>alter session set sql_trace=true;
! j0 M9 q! g# l$ Y5 _2 E2 ]& S2 e* [: B% z3 z* b6 E
  Session altered.
: N. X+ O+ g. n, N" ^; d% R, m* W5 J$ r: u: S
  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:, \# J1 N! {6 x6 o3 Z( f( r
7 v2 r# w5 N8 S8 \. Q* P" ~+ _- o
  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
, y. @, w4 b7 O) _( v. U+ b0 Q4 @$ a6 ^- |! e
  2、指定一下生成的trace文件的名字,便于查找:
8 I3 z. n$ E1 _# n/ R/ r9 t. f
! _6 h4 c( {' P! |" `# W  alter">sys@ORCL>alter session set trace file_identifier='yourname';
1 n" e9 l. B, S  e- Y) s
8 g( e# L4 K4 i  3、执行SQL语句。
% \/ l1 z; r0 A" a( K# Y9 C6 H
8 _1 j7 I. w3 q, y7 H8 E: l  4、利用TKPROF工具格式化输出的trace 文件:% B6 h* L+ p! y
+ n9 D, u2 O# t$ w' e
  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
5 a% y  B* _. O9 V, U
" X# ?& X4 a& }* u, V  A, J; F# U  5、查看生成的文件再设置sql_trace=false:
8 g; `- Q) W4 K5 D! h2 P* z' W+ Z; N/ s/ G* O
  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://newink.inknet.cn/bbs/) Powered by Discuz! X3.1