中国喷墨论坛-喷墨技术应用-数码影像-数码印刷-数码印花
标题:
多种方法查看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 z
5 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. b
5 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.执行sql
7 |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+ S
3 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